匹配精确单词的正则表达式会影响特殊字符匹配

时间:2015-01-30 09:38:33

标签: javascript regex

我想替换用户选择的单词中的特殊字符。

我已将代码编写为

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");

它将删除所有特殊字符,但与确切字词&给出"和"的输出。如,

viverra*._and_ st_and_ard'_and_roid viverra'.Vivamus (sit amet felis) scelerisque) ullamcorper (erat) eu mat)tis lorem.

请帮帮我。我想替换特殊字符,并且想要匹配确切的字......

1 个答案:

答案 0 :(得分:2)

您可以在转义后添加:

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");

只有在有用时才会添加单词边界。