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