【问题标题】:Regular expression for matching exact word affect the special character matching匹配精确词的正则表达式影响特殊字符匹配
【发布时间】:2015-01-30 20:23:22
【问题描述】:

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

我把代码写成

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.

请帮助我。我想替换特殊字符,也想匹配确切的单词....

【问题讨论】:

  • 真的很聪明的问题

标签: javascript regex


【解决方案1】:

你可以在转义后添加:

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

这只会在有用的时候添加单词边界。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多