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

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

它将删除所有特殊字符,但与确切的单词不匹配,并给出“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/

相关文章:

javascript - 使用 javascript 删除元素

javascript - Node .js : Currency limited parallel execution with time interval (rate limiting)

javascript - 将按位运算符应用于数组的值

java - 不为空的正则表达式

java - 如何检查邮箱验证?错误是什么?

javascript - 守夜人 : Get text value of an element when hover over it

javascript - 正则表达式匹配不带路径的文件名

java - Spring Boot YML 中的正则表达式

javascript - 我可以获得有关最多只能包含两 (2) 个连续重复字符的正则表达式的帮助吗?

html - 在 HTML 文件中查找特定标签