我有一个 html 源作为字符串变量。 还有一个单词作为另一个变量,将在该 html 源代码中突出显示。
我需要一个正则表达式,它不会突出显示标签,但会突出显示标签内的文本。
例如我有一个像这样的 html 源
<cfset html = "<span>Text goes here, forr example it container also **span** </span>" />
<cfset wordToReplace = "span" />
<cfset html = ReReplace(html ,"[^(<#wordToReplace#\b[^>]*>)]","replaced","ALL")>
我想要得到的是
<span>Text goes here, forr example it container also **replaced** </span>
但是我有一个错误。任何提示!
最佳答案
I need a Regular Expression which does not highlights tags, but obly text within the tags.
你找不到一个。没有一个对所有合法/野生 HTML 都完全可靠。
原因很简单,正则表达式匹配 Regular languages ,而 HTML 根本就不是正则语言。
即使您非常小心,您也会面临替换您不想替换的内容以及不替换您想要替换的内容的风险,这仅仅是因为 HTML 语法非常复杂。
解析 HTML 的正确方法是使用专门构建的 HTML DOM 解析器。
令人烦恼的是,CF 没有内置的,但如果您的 HTML 是 XHTML,那么您可以使用 XmlParse 和 XmlSearch 来允许您仅对与您的文本匹配的文本(而不是标签)进行 xpath 搜索...某事就像 //*[contains(text(), 'span')]
应该做的那样(more details here)。
如果您还没有 XHTML,那么您需要考虑使用 Java 的 HTML DOM 解析器 - Google 提供了很多解析器(我还没有尝试过,所以无法给出任何具体建议)。
关于java - 如何使用 ColdFusion 替换 HTML 中的文本而不替换 HTML 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3211937/