我的例子是:我有一个包含HTML元素的字符串:
<a href="something+specific_string" title="testing">This is a text and "specific_string"</a>
我需要一个正则表达式来只匹配不在HTML属性中的正则表达式。
这是我当前的正则表达式,它可以工作,但当字符串用双引号括起来时,它会给出误报
((?!\"[\w\s]*)specific_string(?![\w\s]*\"))
我已经尝试了以下正则表达式:
((?!\"[\w\s]*)specific_string(?![\w\s]*\"))
它可以工作,但当字符串用双引号括起来时,它会给出误报
2条答案
按热度按时间bvjveswy1#
如果您想获取标记中的内容,您可能会尝试使用split()工具;每隔”〉”或“〈”就剪下一个字符串,基本上是这样的:
所以,当你想操作它的时候,只要使用字符串的位置0就可以了。
eqfvzcg82#
虽然它在简单的情况下就足够了,但是您应该知道,正是oftensaid使RegExp不适合解析HTML,根据环境的不同,您最好使用更健壮的技术。(有专门讨论这个主题的http://htmlparsing.com/,但它没有讨论JS。)
也就是说,下面的代码在Chrome 107和Node 16.13中有效。
它使用了向后看的方法。你可以使用
/(>[^<]*|^[^<]*)(specific_string)/
和补偿索引/长度来获得匹配的位置...当您在注解中回答时,您将替换为用户提供的HTML,我建议您考虑安全问题(即XSS)。
回到解析HTML w/o RegExp的主题上,我们显然在Web浏览器中有这些技术,我无法阻止自己在Web JS中编写一个快速而肮脏的textNode替换器,在Chrome 107中工作: