【问题标题】:Removing non-alphanumeric text with String.prototype.replace使用 String.prototype.replace 删除非字母数字文本
【发布时间】:2018-10-08 16:56:33
【问题描述】:

我正在尝试删除所有不是字母或数字的字符的字符串。我用正则表达式尝试了String.prototype.replace,但它没有删除预期的字符:

this.colorPreset1 = this.colorPreset1.replace(/^[0-9a-zA-Z]+$/, '');

【问题讨论】:

    标签: javascript regex


    【解决方案1】:
    this.colorPreset1=this.colorPreset1.replace(/[^0-9a-zA-Z]/g, '');
    

    字符组已更改为排除组。 [^] 将匹配任何不在列表中的字符。正如你所拥有的,它只会匹配你想要保留的字符。

    字符串的锚点已被删除 - 您想要替换任何非字母数字字符,因此它们的位置无关紧要。

    添加了全局标志 //g,因此它将替换所有匹配项,而不仅仅是第一个匹配项。

    【讨论】:

    • 解释为什么您发布的代码有效是有益的。它鼓励理解,而不仅仅是复制/粘贴代码。
    【解决方案2】:

    通过在正则表达式周围添加^$,您明确告诉它匹配以此模式开头和结尾的字符串。

    因此,只有当字符串的所有内容都与模式匹配时,它才会替换搜索到的模式。

    如果你想匹配每个出现的非数字或字母字符,你将不得不删除^ 开始约束和$ 结束约束,但还必须改变模式本身:

    [A-Za-z0-9]
    

    匹配字母或数字字符,你想要相反的(反转字符类在字符类的开头添加^

    [^A-Za-z0-9]
    

    最后将g 选项添加到正则表达式以告诉它匹配每个出现(否则只会替换第一个出现):

    /[^A-Za-z0-9]+/g
    

    【讨论】:

      【解决方案3】:

      JavaScript RegEx 替换只会替换第一个找到的值。如果您在模式中指定 g 参数,它表示全局或“全部替换”。

      this.colorPreset1=this.colorPreset1.replace(/[^0-9a-zA-Z]/g, '');
      

      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp

      What does the regular expression /_/g mean?

      【讨论】:

        猜你喜欢
        • 2013-11-29
        • 2012-07-04
        • 1970-01-01
        • 2021-12-02
        • 2014-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多