RegEx(在 JavaScript 中查找/替换) - 匹配非字母数字字符但忽略 - 和 +
Posted
技术标签:
【中文标题】RegEx(在 JavaScript 中查找/替换) - 匹配非字母数字字符但忽略 - 和 +【英文标题】:RegEx (in JavaScript find/replace) - match non-alphanumeric characters but ignore - and + 【发布时间】:2011-03-11 19:36:43 【问题描述】:我们一直在使用以下 js/regex 来查找和替换除 - 和 + 之外的所有非字母数字字符
outputString = outputString.replace(/[^\w|^\+|^-]*/g, "");
但它并不完全有效 - 它不会取代 ^ 和 |人物。我不禁想知道这是否与 ^ 和 | 有关在正则表达式本身中用作元字符。
我已尝试切换为使用[\W|^+|^-]
,但它取代了 - 和 +。我认为可能是前瞻断言可能是答案,但我不太确定如何实现它们。
有没有人知道如何做到这一点?
【问题讨论】:
【参考方案1】:字符类不做交替,因此|
是字面的,^
必须在类的开头才能生效(否则它会按字面处理。)
使用这个:
[^\w+-]+
(另外,如果-
不是最后一个,则需要在字符类中将其转义为\-
- 因此,如果可能会将更多字符添加到异常列表中,请小心)。
您也可以像这样使用负前瞻来做到这一点:
(?![+-])\W
注意:您不希望在\W
之后出现*
或+
,因为前瞻仅适用于紧随其后的字符(并且g
标志使替换重复直到完成)。
还要注意\w
和\W
将_
视为单词字符。如果不希望这样做,则可以使用 (?![+-])[\W_]
替换它(或在第一个表达式中使用显式范围)。
【讨论】:
嗨,彼得,谢谢 - 太好了。[^\w+-]+
工作得很好!感谢您提供更多信息 - 非常有帮助。以上是关于RegEx(在 JavaScript 中查找/替换) - 匹配非字母数字字符但忽略 - 和 +的主要内容,如果未能解决你的问题,请参考以下文章
PHP Regex preg_replace 函数仅查找和替换 3 个匹配项中的第一个和最后一个,而不是中间一个
JavaScript RegEx:在两个“标记”之间替换字符串中的文本