我想替换用户选择的单词中的特殊字符。
我将代码编写为
var name = "and";
var text = "viverra*.and standard'android viverra'.Vivamus (sit amet felis) scelerisque) ullamcorper (erat) eu mat)tis lorem.";
name = name.replace(new RegExp(/\[(.*?')\]/g), '');
var escaped= name.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$&")
var regexp = new RegExp("\\b(" + escaped + ")\\b", "g");
console.log(text.replace(regexp, "_$&_"));
它给出了精确单词的正确输出,
viverra*._and_ standard'android viverra'.Vivamus (sit amet felis) scelerisque) ullamcorper (erat) eu mat)tis lorem.
但是当用户选择
name=(sit amet felis) scelerisque) or (erat) or viverra' or viverra*.
它确实替换了特殊字符。
当我将第 5 行写为
var regexp = new RegExp(escaped, "g");
它将删除所有特殊字符,但与确切的单词不匹配,并给出“and”的输出,
viverra*._and_ st_and_ard'_and_roid viverra'.Vivamus (sit amet felis) scelerisque) ullamcorper (erat) eu mat)tis lorem.
请帮助我。我想替换特殊字符并且还想匹配确切的单词....
最佳答案
您可以在转义后添加:
var escaped= name.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$&");
// 2 lines to add:
escaped = escaped.replace(/^(\w)/, "\\b$1");
escaped = escaped.replace(/(\w)$/, "$1\\b");
var regexp = new RegExp(escaped, "g");
这只会在有用时添加单词边界。
关于javascript - 精确匹配单词的正则表达式影响特殊字符匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28232987/