我做了一个正常工作的正则表达式,但我认为这不是最好的用例:
el = '<div style="color:red">123</div>';
el.replace(/(<div.*>)(\d+)(<\/div>)/g, '$1<b>$2</b>$3');
// expecting result: <div style="color:red"><b>123</b></div>
谷歌搜索后我发现{regexps中的(?: ... )
- 意味着忽略组匹配,因此:
el.replace(/(?:<div.*>)(\d+)(?:<\/div>)/g, '<b>$1</b>');
// returns <b>123</b>
但我需要第一个例子的期待结果。
有没有办法排除他们?只是写replace(/.../, '<b>$1</b>')
?
这只是了解如何在regexp中排除组的一个小例子。我知道,we can't parse HTML with regexp:)
答案 0 :(得分:3)
所以你想在仅使用替换<b>$1</b>
?
在你的情况下,只需replace(/\d+/, '<b>$&</b>')
即可。
但是如果你想确保数字周围有div标签,你可以使用以下表达式中的lookarounds和\K
。除了JS 不支持lookbehind和\K
之外,所以你运气不好,你必须在JS中使用捕获组。
<div[^>]*>\K\d+(?=</div>)
答案 1 :(得分:0)
'$1<b>$2</b>$3'
的替换值没有任何问题。我只想改变你的正则表达式:
el = '<div style="color:red">123</div>';
el.replace(/(<div[^>]*>)(\d+)(<\/div>)/g, '$1<b>$2</b>$3');
更改它与第一个div匹配的方式会保持div标记的完全匹配,但要确保它匹配第一个div标记的结束>
之前的最小值,而不是最大值。
使用你的正则表达式,你不会得到你想要的输入字符串:
el = '<div style="color:red">123</div><div style="color:red">456</div>';
使用类似以下内容的问题:
el.replace(/\d+/, '<b>$&</b>')
对于这样的事情不能正常工作:
el = '<div style="margin-left: 10px">123</div>'
因为它会获取div标签内的数字。