如何替换链接中的特定文本,但跳过链接中已有的文本?
示例:
<a href="helloworld.com">Lorem ipsum dolor sit amet</a>, consectetur
adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore
magna aliqua. Lorem ipsum dolor sit amet, consectetur <a
href="adipisicing.com">adipisicing</a> elit, sed do eiusmod tempor
incididunt ut labore et dolore <a href="helloworld.com">magna aliqua.
Lorem ipsum</a> dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua.
如您所见,我需要在第二个语句中将“Lorem ipsum”替换为<a href="somewhere.com">Lorem ipsum</a>
,但跳过已在链接中的“Lorem ipsum”
谢谢!
答案 0 :(得分:4)
正则表达式不太适合处理HTML。您拥有的每个解决方案都会在评论,嵌入式JavaScript或格式错误的HTML上失败。
也就是说,如果您严格控制文档的结构,可以尝试使用正则表达式方法。要匹配不在a
标记内的每个“Lorem ipsum”,我会使用
Lorem ipsum(?=([^<]*($|<a |<[^/]|</[^a]))*($|(?<=a )))
此语句使用look ahead assertion匹配“Lorem ipsum”,如果在下一个结束之前后跟一个开始a
标记,或者不再跟随标记。请参阅RegExr中的实际操作。
如您所见,使用HTML解析器可能更好。 =)