如何替换链接中的文本,但跳过链接中已有的文本


How to replace text in link, but skip this text that already in links?

如何替换链接中的特定文本,但跳过链接中已经存在的文本?

示例:

<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">

谢谢!

正则表达式不太适合处理HTML。您拥有的每一个解决方案都会在注释、嵌入的javascript或格式错误的HTML上惨败。

也就是说,如果您严格控制文档的结构,您可以尝试regex方法。为了匹配不在a标签内的每个"Lorem ipsum",我会使用

Lorem ipsum(?=([^<]*($|<a |<[^/]|</[^a]))*($|(?<=a )))

如果"Lorem ipsum"后面跟有一个打开的a标记,然后是下一个关闭的标记,或者后面没有其他标记,则此语句使用前瞻性断言来匹配它。在RegExr上查看它的实际操作。

正如您所看到的,使用HTML解析器可能更好。=(