Javascript正则expression式“replace(/ / g)”删除数字?
我正在使用replace JavaScript函数在Javascript中进行一些testing。
考虑在节点REPL上执行的以下示例。
这是一个replace
,从string中删除空格,连字符和下划线。
> "call this 9344 5 66 22".replace(/[ _-]/g, ''); 'callthis934456622'
那正是我期待的。 只删除空格。
不过看看这个:
> "call this 9344 5 66 22".replace(/[ -_]/g, ''); 'callthis'
为什么当我把这个正则expression式组合像这样-_
(空格,连字符,下划线)是否删除string中的数字?
我做了更多的testing:
-
(空格,连字符)不会删除数字
_
(空格,下划线)不会删除数字
_-
(空格,下划线,连字符)不会删除数字
-_
(连字符,下划线,空格)不会删除数字
_-
(下划线,连字符,空格)REPL块
-_
(空格,连字符,下划线)删除数字
[ -_]
表示从space
(ASCII 32)到_
(ASCII 95)的字符,其中包括数字和大写字母。
你正在寻找的是[ \-_]
。 逃避-
将使其行为像字符,而不是范围的元字符。
如果字符类中的开始或结束位置不存在,则连字符需要被转义,否则表示一个range
。
所以这个正则expression式:
[ -_]
将匹配任何从空格到下划线,即ASCII 32-95
字符在字符类中有特殊的含义。 当出现在两个字符之间时,它表示一个字符范围 – 例如[az]
匹配任何字符代码在a
和z
之间a
字符。
然而,正如你所看到的,当它被放置在字符类的开始或结束时,它只是表示一个字面值。 这也可以通过在字符类中[ \-_]
– 即[ \-_]
。
"call this 9344 5 66 22".replace(/(\s|-|_)/g, '');
在一个类中,短划线字符在作为范围运算符时才有特殊含义
它不分离从左到右分解的子句。
否则,它被认为没有任何其他文字不同。
正则expression式parsing器没有时间担心好的表单 。
所以你可以把短划线放在任何你想要的字面上,只要它把条款分开(即不含糊)。
大多数人把它放在最后或开始或逃脱,所以没有发生概念错误。
条款的例子,这是高光,文字破折号:
[ – az
– \p{L}
– 0-9
– \x00-\x09
– \ x20-]