用正则表达式替换 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的主要内容,如果未能解决你的问题,请参考以下文章
如果出现多于 n 次,则 JavaScript 正则表达式替换