首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在不替换HTML标签的情况下使用ColdFusion替换HTML中的文本?

如何在不替换HTML标签的情况下使用ColdFusion替换HTML中的文本?
EN

Stack Overflow用户
提问于 2010-07-09 18:56:38
回答 2查看 1.1K关注 0票数 0

我有一个html源代码作为字符串变量。以及作为将在该html源中突出显示的另一变量的单词。

我需要一个正则表达式,它不突出标签,但可以在标签内的文本。

例如,我有一个html源代码,如下所示

代码语言:javascript
运行
复制
<cfset html =  "<span>Text goes here, forr example it container also **span** </span>" />
<cfset wordToReplace = "span" />
<cfset html = ReReplace(html ,"[^(<#wordToReplace#\b[^>]*>)]","replaced","ALL")>

我想得到的是

代码语言:javascript
运行
复制
<span>Text goes here, forr example it container also **replaced** </span>

但我有一个错误。任何提示!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-10 01:25:44

我需要一个正则表达式,它不会突出显示标签,但可以突出显示标签内的文本。

你不会找到的。对于所有合法/狂野的HTML来说,它不是完全可靠的。

原因很简单,因为正则表达式与Regular languages匹配,而HTML根本不是一种正则语言。

即使你非常小心,你也会冒着替换掉你不想要的东西,而不是替换你想要的东西的风险,这仅仅是因为HTML语法太复杂了。

解析HTML的正确方法是使用专门构建的HTML DOM解析器。

令人恼火的是CF没有内置的xpath,但是如果您的HTML是XHTML,那么您可以使用XmlParseXmlSearch来允许您只搜索与您的文本匹配的文本(而不是标记)。像//*[contains(text(), 'span')]应该做的事情(more details here)。

如果您还没有XHTML,那么您将需要考虑使用用于Java的HTML DOM解析器- Google出现了很多次(我还没有尝试过任何解析器,所以不能给出任何具体的建议)。

票数 3
EN

Stack Overflow用户

发布于 2010-07-09 21:53:40

您需要做的是使用lookahead来确保您的文本不包含在标记中。诚然,这可能会写得更好,但它会得到你想要的结果。当标签有属性时,它甚至可以处理。

代码语言:javascript
运行
复制
<cfset html =  "<span class='me'>Text goes here, forr example it container also **span** </span>" />
<cfset wordToReplace = "span" />
<cfset html = ReReplace(html ,"(?!/?<)(#wordToReplace#)(?![^.*>]*>)","replaced","ALL")>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3211937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档