1

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

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

它有什么问题?

谢谢

4

2 回答 2

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

尝试

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

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

于 2013-07-31T14:37:43.683 回答
0

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

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

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

于 2013-07-31T14:36:54.807 回答