我需要在文档中的任何位置找到并更改给定的字符串。我可以分别处理两个条件,但无法一起工作。
-\n
划分,并且应始终匹配。假设我想用<stuff>
标记包装匹配的文本。对于第一个,我有以下感觉丑陋但有效。我在每个单词的每个字符之间插入一个可选的-\n
组。
function createMask(term){
var words = term.split(' ');
new_words = [];
for(i=0; i<words.length; i++){
var word = words[i].split('').join('(\\-\\n)?');
new_words.push(word);
}
var mask = new_words.join('\\s'); \\Any space is ok here.
return mask;
}
var doc = 'This is sand, and rand,\nand something else a-\nn-\nd ';
var mask = createMask('and');
var newDoc = doc.replace(RegExp(mask, 'ig'), '<stuff>$&</stuff>');
这匹配最后一个&#39;和&#39;还有“沙子”里面的那些并且&#39;兰德&#39;
对于第二个我可以做以下
function createMask(term){
var mask = '([^a-zA-Z0-9-])(' + term + ')([^a-zA-Z0-9-])';
return mask;
}
var doc = 'This is sand, and rand,\nand something else a-\nn-\nd ';
var mask = createMask('and');
var newDoc = doc.replace(RegExp(mask, 'ig'), '$1<stuff>$2</stuff>$3');
将表达式组合在一起的工作除了捕获组错误之外。我尝试将(\\-\\n)?
切换为(?:\\-\\n)
,但后来无法匹配任何内容。非常感谢任何帮助。
答案 0 :(得分:1)
你最想要一个单词边界\b
。您还可以将代码缩短为这两行代码段:
var text = 'This is sand, and dand rand,\nand something else a-\nn-\nd dand';
var words = 'and dand'
console.log(text.replace(RegExp('\\b' + words.replace(/\B|(\S)\b/g, '$1(?:-\\n)?').replace(/\s/g, '\\s') + '\\b', 'ig'), '<stuff>$&</stuff>'))