【发布时间】:2018-10-08 16:56:33
【问题描述】:
我正在尝试删除所有不是字母或数字的字符的字符串。我用正则表达式尝试了String.prototype.replace,但它没有删除预期的字符:
this.colorPreset1 = this.colorPreset1.replace(/^[0-9a-zA-Z]+$/, '');
【问题讨论】:
标签: javascript regex
我正在尝试删除所有不是字母或数字的字符的字符串。我用正则表达式尝试了String.prototype.replace,但它没有删除预期的字符:
this.colorPreset1 = this.colorPreset1.replace(/^[0-9a-zA-Z]+$/, '');
【问题讨论】:
标签: javascript regex
this.colorPreset1=this.colorPreset1.replace(/[^0-9a-zA-Z]/g, '');
字符组已更改为排除组。 [^] 将匹配任何不在列表中的字符。正如你所拥有的,它只会匹配你想要保留的字符。
字符串的锚点已被删除 - 您想要替换任何非字母数字字符,因此它们的位置无关紧要。
添加了全局标志 //g,因此它将替换所有匹配项,而不仅仅是第一个匹配项。
【讨论】:
通过在正则表达式周围添加^ 和$,您明确告诉它匹配以此模式开头和结尾的字符串。
因此,只有当字符串的所有内容都与模式匹配时,它才会替换搜索到的模式。
如果你想匹配每个出现的非数字或字母字符,你将不得不删除^ 开始约束和$ 结束约束,但还必须改变模式本身:
[A-Za-z0-9]
匹配字母或数字字符,你想要相反的(反转字符类在字符类的开头添加^:
[^A-Za-z0-9]
最后将g 选项添加到正则表达式以告诉它匹配每个出现(否则只会替换第一个出现):
/[^A-Za-z0-9]+/g
【讨论】:
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
【讨论】: