代码之家  ›  专栏  ›  技术社区  ›  BlahMclean

如何匹配不在<和>[duplicate]实例之间的字符串字符

  •  0
  • BlahMclean  · 技术社区  · 6 年前

    我有这个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>
    

    应与更换前相同。

    0 回复  |  直到 9 年前
        1
  •  86
  •   Jerry    8 年前

    好的,试着用这个正则表达式:

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

    Example worked on 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.
    

    如果 text simple 在html标签之间。

        2
  •  1
  •   Explosion Pills    11 年前
    ^([^<]*)<\w+.*/\w+>([^<]*)$
    

    然而,这是一个非常天真的表达。最好使用DOM解析器。