Javascript 仅替换捕获组-正则表达式

Javascript 仅替换捕获组-正则表达式,javascript,regex,Javascript,Regex,我必须用b标签替换strong标签。为此,我创建了一个regex//gi。我只想替换捕获组(strong)。但它用be替换了整个标签。 例如: “我的名字是Tariq”。替换(//gi,'b'); 但它的结果是 我的名字是bTariqb。 这里怎么了…?更新: 最后补充:虽然下面的表达式在大多数情况下都有效,但它们无法处理这样的标记: var example = "I want to <strong>replace</strong> all strong tags w

我必须用
b
标签替换
strong
标签。为此,我创建了一个regex
//gi
。我只想替换捕获组
(strong)
。但它用be替换了整个标签。
例如:

“我的名字是Tariq”。替换(//gi,'b');
但它的结果是
我的名字是bTariqb。

这里怎么了…?

更新:
最后补充:虽然下面的表达式在大多数情况下都有效,但它们无法处理这样的标记:

var example = "I want to <strong>replace</strong> all strong tags with the <i class='strong-text stronger'>better</i> b tag";
模式说明:
-
(=“']*?)
如下所示,但我们排除了
=
'
作为匹配项,这意味着

将不匹配,因为在开头
之间有一个
=/code>字符。
-代码\b错误\b/代码:添加了单词边界(见下文)
-模式的其余部分保持不变。/p
pAnyway,这可能是最接近你得到的可靠模式。尽管如此:如果您计划使用大量标记,请考虑使用XML解析器,因为RegExp/em不是该作业的最佳工具/p
人力资源
pstrong初始答案/em/strong/p
p您想用em“b”/em替换em“strong”/em,并保持其他一切不变,对吗?在这种情况下,您应该将所有要替换的内容emexcept/em分组,并使用替换字符串中对组的反向引用:/p
受到Harpeet(有点缺陷)正则表达式的启发,您也可以选择使用此模式:/p
precodestr.replace(/\bstrong\b(?=[^]*>)/gi,“b”)
如果没有别的,这是一个更优雅的期待模式

解释:

  • \b字符串\b
    :匹配字符串文字,如果它不是单词的一部分(
    \b
    是单词边界)
  • (?=[^]*>)
    :仅当它后面有0个或多个不是
    的字符,以及一个结束
    。如果我们省略
    更新:
    最后补充:虽然下面的表达式在大多数情况下都有效,但它们无法处理这样的标记:

    var example = "I want to <strong>replace</strong> all strong tags with the <i class='strong-text stronger'>better</i> b tag";
    
    模式说明:
    -
    (=“']*?)
    如下所示,但我们排除了
    =
    '
    作为匹配项,这意味着

    将不匹配,因为在开头
    之间有一个
    =/code>字符。
    -代码\b错误\b/代码:添加了单词边界(见下文)
    -模式的其余部分保持不变。/p
    pAnyway,这可能是最接近你得到的可靠模式。尽管如此:如果您计划使用大量标记,请考虑使用XML解析器,因为RegExp/em不是该作业的最佳工具/p
    人力资源
    pstrong初始答案/em/strong/p
    p您想用em“b”/em替换em“strong”/em,并保持其他一切不变,对吗?在这种情况下,您应该将所有要替换的内容emexcept/em分组,并使用替换字符串中对组的反向引用:/p
    受到Harpeet(有点缺陷)正则表达式的启发,您也可以选择使用此模式:/p
    precodestr.replace(/\bstrong\b(?=[^]*>)/gi,“b”)
    
    如果没有别的,这是一个更优雅的期待模式

    解释:

    • \b字符串\b
      :匹配字符串文字,如果它不是单词的一部分(
      \b
      是单词边界)

    • (?=[^]*>)
      :仅当它后面有0个或多个不是
      的字符,以及一个结束
      。如果我们省略
      ,一条捷径就是这样

      "My name is <strong>Tariq</strong>.'.replace(/(<\/?)strong(?=[^>]*>)/gi,'$1b');
      
      “我的名字是Tariq”。替换(/(]*>)/gi,$1b');
      
      这里还有一个简短的解释:

      (<\/?)strong(?=[^>]*>)
      
      (]*>)
      


      这是一条捷径

      "My name is <strong>Tariq</strong>.'.replace(/(<\/?)strong(?=[^>]*>)/gi,'$1b');
      
      “我的名字是Tariq”。替换(/(]*>)/gi,$1b');
      
      这里还有一个简短的解释:

      (<\/?)strong(?=[^>]*>)
      
      (]*>)
      

      您需要的正则表达式是

      /strong(?=>)/g
      
      "My name is <strong>Tariq</strong>".replace(/strong(?=>)/g, "b")
      
      /strong(?=>)/g
      “我的名字是Tariq”。替换(/strong(?=>)/g,“b”)
      
      您需要的正则表达式是

      /strong(?=>)/g
      
      "My name is <strong>Tariq</strong>".replace(/strong(?=>)/g, "b")
      
      /strong(?=>)/g
      “我的名字是Tariq”。替换(/strong(?=>)/g,“b”)
      

      你能不能只替换
      ,并捕获
      /
      (如果存在)将其添加到(
      )?如果你只是替换一个标记,为什么不替换(
      )。替换(“”,“”)。替换(“”,“”)
      ?@BenFortune这只是一个示例。我的原始HTML将包含多个标记。@NiettheDarkAbsol这里有一个问题,我的HTML可能包含多个强标记。您不能只替换
      ,并捕获
      /
      (如果存在)以将其添加到(
      )中吗?如果您只是替换一个标记,为什么不只是
      .replace(,'')。replace(“”,“”)
      ?@BenFortune这只是一个示例。我的原始HTML将包含多个标记。@NiettheDarkAbsol这里有一个问题,我的HTML可能包含多个强标记。替换字符串无效:JS反向引用是
      $
      。您的模式也不会处理意外的空格或标记-attributes@EliasVanOotegem ...嗯…我会试着找出你的注释,thx@EliasVanOotegem:你是对的,有一个问题……替换应该是
      $1b
      ,而不是以前的
      b\1
      。其余的都是绝对正确的(已测试,现在是^^)
      'fooBold。替换(/(]*>)/gi,$1b'))
      =>如果标签某处包含空格,则您的模式仍然失败,though@EliasVanOotegem:
      语法不正确。IMHO此正则表达式不应负责修复输入代码。您首先需要对其进行清理。替换字符串无效:JS返回引用为
      $
      。您的模式rn也不处理意外的空白或标记-attributes@EliasVanOotegem…嗯…我会试着找出你的注释,thx@EliasVanOotegem你是
      (<\/?)strong(?=[^>]*>)
      
      /strong(?=>)/g
      
      "My name is <strong>Tariq</strong>".replace(/strong(?=>)/g, "b")