首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解析replaceAll的replaceAll

如何解析replaceAll的replaceAll
EN

Stack Overflow用户
提问于 2013-02-06 19:59:23
回答 3查看 276关注 0票数 3

我有个小问题。我有一个文本,我必须在浏览器中阅读几次。每次,我打开这个文本,自动启动我写的replaceAll。这很简单,很基本,但问题是,当我下次替换时(每次我读这篇文章时),我有一个replaceAll的replaceAll。例如,我在文本中有:

代码语言:javascript
复制
XIII

我想将其替换为

代码语言:javascript
复制
<b>XIII</b>

通过以下方式:

代码语言:javascript
复制
txt.replaceAll("XIII","<b>XIII</b>")

第一次一切都很好,但后来,当我再次阅读文本时,它变成了:

代码语言:javascript
复制
<b><b>XIII</b></b>

这是一个愚蠢的问题,但我现在从Java开始。我看过可以用regex.Could的人发个小例子?

谢谢,对不起,我的英语很差。

EN

回答 3

Stack Overflow用户

发布于 2013-02-06 20:02:56

您需要负向回溯以防止匹配已标记的字符串:

代码语言:javascript
复制
txt.replaceAll("(?<!>)XIII","<b>XIII</b");

这个表达式看起来有点令人费解,但它的分解方式如下:

  • (?<! ... )是负数的模板,lookbehind;
  • >是我们要确保不出现在字符串前面的特定字符。

我还应该警告你,用正则表达式修复HTML通常会变成一个恶毒的循环,升级正则表达式来处理另一个特殊情况,只会看到它在下一个情况下失败。它最终变成了一个没有人能读懂的怪物,更不用说改进了。

票数 3
EN

Stack Overflow用户

发布于 2013-02-06 20:04:18

有一个非常快速的解决方案。在做你自己的之前,做相反的替换。

让我来展示一下:

代码语言:javascript
复制
txt.replaceAll("<b>XIII</b>","XIII").replaceAll("XIII","<b>XIII</b>")

因此,您首先将您的<b>转换为普通,然后使用<b>将其恢复,并且无需添加新的<b>级别即可实现相同的结果。

票数 1
EN

Stack Overflow用户

发布于 2013-02-06 20:06:51

这样如何:

代码语言:javascript
复制
txt = txt.replaceAll ("XIII", "<b>XIII</b>").
    replceAll ("<b><b>", "<b>").replaceAll ("</b></b>", "</b>");

我认为<b><b></b></b>在超文本标记语言中没有太多意义,所以即使在其他地方也可以去掉重复的内容。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14728574

复制
相关文章

相似问题

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