为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式替换html标签之外的文本

正则表达式替换html标签之外的文本

我有这个HTML:"This is simple html text <span class='simple'>simple simple text text</span> text"我只需要匹配任何HTML标记之外的单词。我的意思是,如果我想匹配“简单”和“文本”,则只能从“这是简单的html文本”和最后一部分“文本”中得到结果-结果将是“简单” 1匹配,“文本” 2火柴。有人可以帮我吗?我正在使用jQuery。var pattern = new RegExp("(\\b" + value + "\\b)", 'gi');if (pattern.test(text)) {    text = text.replace(pattern, "<span class='notranslate'>$1</span>");}value 是我要匹配的单词(在这种情况下为“简单”)text 是 "This is simple html text <span class='simple'>simple simple text text</span> text"我需要用来包装所有选定的单词(在此示例中为“简单”)<span>。但是我只想包装任何 HTML标记之外的词。这个例子的结果应该是This is <span class='notranslate'>simple</span> html <span class='notranslate'>text</span> <span class='simple'>simple simple text text</span> <span class='notranslate'>text</span>我不想替换里面的任何文本<span class='simple'>simple simple text text</span>它应与更换前的相同。
查看完整描述

2 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

好的,尝试使用此正则表达式:


(text|simple)(?![^<]*>|[^<>]*</)

该示例在regex101上工作。


分解:


(         # Open capture group

  text    # Match 'text'

|         # Or

  simple  # Match 'simple'

)         # End capture group

(?!       # Negative lookahead start (will cause match to fail if contents match)

  [^<]*   # Any number of non-'<' characters

  >       # A > character

|         # Or

  [^<>]*  # Any number of non-'<' and non-'>' characters

  </      # The characters < and /

)         # End negative lookahead.

否定的超前查询将阻止html标签之间的text或simple。


查看完整回答
反对 回复 2019-10-21
  • 2 回答
  • 0 关注
  • 846 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信