创建javascript正则表达式以使用白名单替换字符

时间:2013-07-31 14:33:42

标签: javascript regex

我正在尝试创建一个正则表达式,它将替换所有不在指定白名单中的字符(字母,数字,空格,括号,问号和说明标记)
这是代码:

var regEx = /^[^(\s|\w|\d|()|?|!|<br>)]*?$/;
    qstr += tempStr.replace(regEx, '');

它出了什么问题?

谢谢

2 个答案:

答案 0 :(得分:7)

  • anchors错误 - 它们只允许正则表达式匹配整个字符串
  • 懒惰的量词是错误的 - 你不希望正则表达式匹配0个字符(如果你删除了锚点)
  • 括号和竖线字符错误 - 您在character class中不需要它们。
  • <br>错误 - 您无法匹配字符类中的特定子字符串。
  • \d是多余的,因为它已经包含在\w中(感谢Alex K。!)
  • 您缺少全局修改器以确保可以执行多次替换。
  • 您应该使用+而不是*,以免自己更换大量空字符串。

尝试

var regEx = /[^\s\w()?!]+/g;

并独立处理<br>(在应用正则表达式之前,或删除括号)。

答案 1 :(得分:0)

您需要使用g(全局)修饰符:

var regEx = /^[^(\s|\w|\d|()|?|!|<br>)]*?$/g; // <-- `g` goes there
qstr += tempStr.replace(regEx, '');

这允许您的表达式多次匹配。