[英]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,控制台
那么正则表达式中是否有仅适用于空格且行为类似于\\ b的单词边界?
您要么希望它的行为类似于\\b
,要么就象空白一样。 它不能同时做到。
由于前者显然不符合您的要求,为什么不实际使用空白呢?
也就是说,将\\b
交换为\\s
。
只是不要忘记\\s
不是零宽度,因此,如果要执行替换,则必须将其考虑在内,或者将其放在先行和后置断言中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.