繁体   English   中英

正则表达式字边界仅用于空白

[英]Regex Word boundary for only whitespace

我在使用new RegExp("(\\\\b" + var + "\\\\b)")正则表达式时遇到麻烦。 我遇到的问题是,如果文本中有一个span元素,而我要替换span这个 ,它将替换span元素。 我认识到“ <”算作“单词边界”的问题,因此它找到了<**span**>但我不希望这样。 那么正则表达式中是否有仅适用于空格且行为类似于\\b单词边界?

唯一安全的方法是遍历文本节点并在其中替换。 这是使用TreeWalker的一种解决方案:

var regexp = new RegExp("\\b" + src_text + "\\b", "g");
var walker = document.createTreeWalker(elt, NodeFilter.SHOW_TEXT);
var node = walker.nextNode();

while (node) {
  let nextNode = walker.nextNode();
  let newNode = document.createElement('span');
  newNode.innerHTML = node.textContent.replace(regexp, "foo");
  node.parentNode.replaceChild(newNode, node);
  node = nextNode;
}

您可能还希望转义src_text中具有特殊正则表达式含义的字符。 通过快速搜索,您可以轻松地找到如何做到这一点。 例如,请参阅此问题

在您的情况下,替换的字符串包含HTML。 这将需要更多的工作。 我们创建一个新节点并设置其innerHTML,然后用新节点替换旧节点。

小提琴: https//jsfiddle.net/zanhaz0j/

怎么样:

new RegExp("\\s(" + var + ")\\s")

如果单词被空格字符包围,它将找到(并匹配)您的单词。

JsBin: http ://jsbin.com/fuliqaxilo/edit?js,控制台

试试这个正则表达式:

 /(:?\s|^)(span)(?=([^>]|$))/ig

观看演示

那么正则表达式中是否有仅适用于空格且行为类似于\\ b的单词边界?

您要么希望它的行为类似于\\b ,要么就象空白一样。 它不能同时做到。

由于前者显然不符合您的要求,为什么不实际使用空白呢?

也就是说,将\\b交换为\\s

只是不要忘记\\s不是零宽度,因此,如果要执行替换,则必须将其考虑在内,或者将其放在先行和后置断言中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM