javascript - 如果正则表达式紧随第一个匹配之后,为什么会忽略第二个匹配?

标签 javascript regex dom-events

我有一个字符串:'4 0 13 0 0 30 32 0 14 9 27 0 27 20 4 0 22 0' 。我希望我的正则表达式找到的值包含在名为 targetValue 的变量中。 在这种情况下targetValue恰好等于 0我希望所有匹配项都替换为粗体文本。这是基本代码:

function startReplacing(){
  var targetValue = 0;
  var replacer = ' <b> ' + targetValue + ' </b> ';
  var re = new RegExp('\\s'+targetValue+'\\s','gi');

  var str = document.getElementById('string').innerHTML;
  str = str.replace(re, replacer);

  document.getElementById('string').innerHTML = str;
}
b{ font-size:125% }
<p id="string"> 4 0 13 0 0 30 32 0 14 9 27 0 27 20 4 0 22 0 </p>
<button onclick="startReplacing()">REPLACE</button>

点击“REPLACE”后,您是否注意到值“30”之前的“0”?我的正则表达式错过了这个值。如何更改代码来解决此问题?

注意:我的正则表达式遗漏了在第一次匹配后应立即匹配的所有值。

最佳答案

您的正则表达式尝试匹配数字之前和数字之后的空格。如果两个数字之间只有一个空格,则无法同时匹配它们。

我怀疑您根本不想匹配空格,而只需要检查是否没有其他数字。使用word boundary为此:

function startReplacing(){
  var targetValue = 0;
  var replacer = ' <b> ' + targetValue + ' </b> ';
  var re = new RegExp('\\b'+targetValue+'\\b','g');
//                     ^^^               ^^^

  var str = document.getElementById('string').innerHTML;
  str = str.replace(re, replacer);

  document.getElementById('string').innerHTML = str;
}
b{ font-size:125% }
<p id="string">4 0 13 0 0 30 32 0 14 9 27 0 27 20 4 0 22 0</p>
<!-- works without leading and trailing spaces even -->
<button onclick="startReplacing()">REPLACE</button>

关于javascript - 如果正则表达式紧随第一个匹配之后,为什么会忽略第二个匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39624029/

相关文章:

c# - 使用 RegEx 验证字符串是否为 base64 格式?

dom - 如何将 CSS AnimationEnd 事件处理程序添加到 GWT 小部件?

javascript - 在启动之前请求用户应用程序时出错

javascript - document.getElementById onclick 每次页面加载只工作一次

javascript - 如何向 SVG 中的椭圆元素添加轮廓/边框?

javascript - 我应该使用 | (管道)或? (问号)?

c# - 正则表达式匹配一段文本中的一个部分

.net - 正则表达式:如何获取组名

javascript - 强制 "Tab"点击在元素内移动 - Jquery/Javascript

php - jQuery 或 Javascript 解决方案删除特定标签但保留其余部分