如何匹配不在<;a>;和它的href,使用JavaScript?
我正在搜索页面以查找特定的关键字。这本身就很容易。更复杂的是,如果这个关键字是如何匹配不在<;a>;和它的href,使用JavaScript?,javascript,html,regex,Javascript,Html,Regex,我正在搜索页面以查找特定的关键字。这本身就很容易。更复杂的是,如果这个关键字是标记的一部分,我就不想匹配它 例如 上面的问题是,如果它是href的一部分,它仍然与关键字匹配 有什么想法吗? 谢谢使用JavaScript正则表达式无法可靠地做到这一点。使用.NET正则表达式引擎是为数不多的支持无限长lookback断言的引擎之一,但JavaScript根本不知道lookback断言,因此您无法回过头来查看要匹配的文本之前的内容 因此,您应该要么使用DOM解析器(我相信精通JavaScript的人可
标记的一部分,我就不想匹配它
例如
上面的问题是,如果它是href
的一部分,它仍然与关键字匹配
有什么想法吗?
谢谢使用JavaScript正则表达式无法可靠地做到这一点。使用.NET正则表达式引擎是为数不多的支持无限长lookback断言的引擎之一,但JavaScript根本不知道lookback断言,因此您无法回过头来查看要匹配的文本之前的内容 因此,您应该要么使用DOM解析器(我相信精通JavaScript的人可以在这里提出一种实用的方法),要么阅读文本,删除所有的
标记(如果您是勇敢的类型,您可以使用正则表达式来做这件事),然后在文本的其余部分搜索关键字
编辑:
嗯,有一个肮脏的黑客,你可以使用。这并不漂亮,如果你看Alan Moore对你的问题的评论,你可以想象这个正则表达式会以多种方式失败,但它确实适用于你的例子:
/keyword(?!(?:(?!<a).)*</a)/
/keyword(?)(?:(?)与他的示例代码类似。如果它位于不同标记的属性中,例如
?或者位于注释、CDATA节或处理指令中,该怎么办?如果它是脚本或样式表的一部分,该怎么办?这样疯狂就存在了。。。
var tester = new RegExp("((?!<a.*?>)("+keyword+")(?!</a>))", 'ig');
/keyword(?!(?:(?!<a).)*</a)/
keyword # Match "keyword"
(?! # but only if it is not possible to match the following regex in the text ahead:
(?: # - Match...
(?!<a) # -- unless it's the start of an <a> tag...
. # -- any character
)* # - any number of times
</a> # then match a closing <a> tag.
) # End of lookahead assertion.