Javascript正则表达式“替换(/ [-_] / g)”删除数字?

时间:2014-01-24 16:19:12

标签: javascript regex node.js

我在Javascript中使用replace javascript函数进行了一些测试。

考虑在node REPL上执行的以下示例 它是replace,用于删除字符串中的空格,连字符和下划线。

> "call this 9344 5 66 22".replace(/[ _-]/g, '');
'callthis934456622'

这就是我所期待的。仅删除空格。

但请看一下:

> "call this 9344 5 66 22".replace(/[ -_]/g, '');
'callthis'

为什么当我把这个正则表达式组合完全像这个-_(空格,连字符,下划线)时,它会删除字符串中的数字?


我做了更多测试:

-(空格,连字符)不会删除数字

_(空格,下划线)不会删除数字

_-(空格,下划线,连字符)不会删除数字

-_(连字符,下划线,空格)不会删除数字

_-(下划线,连字符,空格)REPL块??

-_(空格,连字符,下划线)确实会删除数字

5 个答案:

答案 0 :(得分:14)

[ -_]表示从space(ASCII 32)到_(ASCII 95)的字符,其中包括数字和大写字母。

您要找的是[ \-_]。转义-会使其像字符一样,而不是范围的元字符。

答案 1 :(得分:3)

如果在字符类的开头或结尾位置不存在连字符,则需要进行转义,否则它代表range

所以这个正则表达式:

[ -_]

将匹配从空格到下划线的任何内容,即ASCII 32-95

答案 2 :(得分:3)

-字符在字符类中具有特殊含义。当它出现在两个字符之间时,表示字符范围 - 例如[a-z]匹配任何字符代码在az之间的字符。

但是,正如您所观察到的,当它放在字符类的开头或结尾时,它只代表一个文字-字符。这也可以通过转义字符类中的-来完成,即[ \-_]

答案 3 :(得分:2)

"call this 9344 5 66 22".replace(/(\s|-|_)/g, '');

答案 4 :(得分:1)

在一个班级中,破折号字符作为范围操作符具有特殊含义 它 没有 单独的子句,从左到右解析。

否则,它被认为与任何其他文字没有什么不同。

正则表达式解析器没有时间担心好 表单

所以你可以将短划线作为文字放在任何地方,只要它将条款分开(即它不是暧昧的)。

大多数人把它放在最后或开始或逃避它,所以不会发生概念错误。

高亮的子句和文字短划线的示例:

[ - a-z - \p{L} - 0-9 - \x00-\x09 - \ X20 - ]

相关问题