这段正则表达式(?<=href\=")[^]+?(?=#_)
应该匹配href值中的所有内容,除了哈希值以及href url中的哈希值。
它似乎在Regex调试器/测试器(例如http://gskinner.com/RegExr/)下正常工作
但在javascript中它似乎产生语法错误。如果我从<
中移除了(?<=)
它可以正常工作,那不是我想要的正面预测。
我像往常一样脱掉头发,感谢Regex lol
请帮忙
答案 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。