JavaScript正则表达式 - 积极前瞻 - 给我语法错误

时间:2010-05-31 19:09:48

标签: javascript regex

这段正则表达式(?<=href\=")[^]+?(?=#_)应该匹配href值中的所有内容,除了哈希值以及href url中的哈希值。 它似乎在Regex调试器/测试器(例如http://gskinner.com/RegExr/)下正常工作 但在javascript中它似乎产生语法错误。如果我从<中移除了(?<=)它可以正常工作,那不是我想要的正面预测。

我像往常一样脱掉头发,感谢Regex lol

请帮忙

3 个答案:

答案 0 :(得分:7)

(?<=...)(?<!...) lookbehinds ,而不是前瞻。 Javascript的正则表达式引擎不支持Lookbehinds。

资源:

答案 1 :(得分:3)

如前所述,Lookbehinds不支持。

我不知道您为正则表达式使用哪个函数,但如果使用match(),只需添加一个捕获组:

href="(.+?)(?=#)

这给了你,例如:

var str = '<a href="foo#bar"></a>';
var matches = str.match(/href="(.+?)(?=#)/);

// matches[0] =  href="foo
// matches[1] = foo           // <-- this is what you want

其他信息:

[^]表示匹配此字符类中的所有字符。但是班上没有人物。所以它匹配任何字符,这正是点 . 正在做的事情。

答案 2 :(得分:1)

你的正则表达式在RegExr中工作的原因是因为RegExr是一个用ActionScript编写的Flash应用程序,而不是JavaScript。虽然AS宣称自己与JS一样符合EcmaScript标准,但它实际上更强大。它的正则表达式引擎由PCRE库提供支持,因此它具有与PHP相同的功能。

要更准确地了解JavaScript正则表达式可以执行的操作,请使用实际由JavaScript提供支持的测试人员,例如this one

相关问题