用正则表达式替换 Javascript

Posted

技术标签:

【中文标题】用正则表达式替换 Javascript【英文标题】:Javascript Replace by Regex 【发布时间】:2014-01-26 05:36:21 【问题描述】:

我正在使用 RegExp 来制作 slug。我是说替换所有字符与这样的模式不匹配:

str = str.replace(new RegExp('[^a-z0-9-]','g'), '');

它有效,但我需要询问它是否是正确的方式/语法/方法?

感谢任何提示。

【问题讨论】:

你可以这样做,或者str = str.replace(/[^a-z0-9-]/g), ''); 最后一个连字符也错了——'*&%^$--kjhkhkjh'.replace(/[^a-z0-9]/g, ''); @epoch 最后一个连字符是错的? 连字符是字符类中的特殊字符,应该转义。 【参考方案1】:

1) 你可以写

new RegExp('[^a-z0-9-]','g')

作为

/[^a-z0-9-]/g

你写的正则表达式代表如下:

2) [] 中的任何内容都表示任何字符不是序列,但是当 [^] 开头出现抑扬符时表示 NOT在

3)a-z代表从a到z的所有字符(小写字母)

4) 0-9 表示 0 到 9 以及末尾的连字符 (-)...以及连字符。

因此,您想保留哪些字符?如果您只想保留字母数字,请使用<b>/[^A-Za-z0-9]/g</b>(这是区分大小写的版本)或<b>/[^a-z0-9]/gi</b> 不区分大小写

修饰符/标志:<b>g</b> = 全局,<b>i</b>= 不区分大小写

看的好地方:Mozilla MDN RegExp

【讨论】:

虽然这基本上是一个很好的答案,但您可能需要考虑更好的格式,例如使用更多的代码块(除其他外),以​​提高可读性,从而使其成为更好的答案。 :-) @BastiM 感谢您的建议。希望这种格式有帮助。老实说,我还没有探索过格式化选项,我不知道除了在新行上添加四个字符缩进的代码之外还能做什么。 现在看起来好多了 :) 随着时间的推移,你会探索所有这些格式化的东西,你会习惯它们。 @YahyaE 只需在第一个位置添加另一个 character class (您可能需要阅读 :) ),只允许字符。 @YahyaE 这应该可以解决问题:src = src.replace(new RegExp("[^a-z0-9-]*","gi"), "").replace(new RegExp("[^a-z]?([a-z0-9-])","i"),"$1");

以上是关于用正则表达式替换 Javascript的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript正则表达式-替换所有匹配项?

如果出现多于 n 次,则 JavaScript 正则表达式替换

JavaScript 正则表达式

如何在 JavaScript 字符串替换中否定匹配正则表达式? [复制]

用正则表达式替换字符串

Ruby 用捕获的正则表达式模式替换字符串