正则表达式范围内的转义点

Posted

技术标签:

【中文标题】正则表达式范围内的转义点【英文标题】:Escape dot in a regex range 【发布时间】:2012-05-10 23:54:05 【问题描述】:

出于某种原因,这两个正则表达式的行为方式相同:

"43\\gf..--.65".replace(/[^\d.-]/g, "");​  // 43..--.65
"43\\gf..--.65".replace(/[^\d\.-]/g, "");​  // 43..--.65

Demo

在第一个正则表达式中,我不会转义点(.),而在第二个正则表达式中我会(\.)。

有什么区别以及为什么它们的行为相同?

【问题讨论】:

【参考方案1】:

点运算符. 不需要在字符类[] 内转义。

【讨论】:

【参考方案2】:

因为点在字符类内部(方括号[])。

看看http://www.regular-expressions.info/reference.html,它说(在 char 类部分下):

除 ^-]\ 之外的任何字符都将该字符添加到可能的匹配项中 对于字符类。

【讨论】:

而减号(-)只有在范围的中间才需要转义? 如果您想匹配连字符,请在打开方括号后立即添加,例如[-A-Z]。否则连字符指定范围。它适用于您的情况可能只是因为您没有在正则表达式中指定范围,但我建议您遵循参考,以防您稍后添加范围。 或者在右括号之前,或者你可以用斜杠转义它【参考方案3】:

如果您使用 javascript 测试您的正则表达式,请尝试使用 \\. 而不是 \.

它的作用相同,因为 JS 删除了第一个反斜杠。

【讨论】:

今天这个人救了我。我不明白为什么这个表达式不起作用。谢谢【参考方案4】:

在this web page,我看到了:

“请记住,点不是字符类中的元字符,因此我们不需要使用反斜杠对其进行转义。”

所以我猜它的转义是不必要的......

【讨论】:

以上是关于正则表达式范围内的转义点的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配双引号内的每个字符串并包含转义引号

正则表达式

JavaScript正则表达式,这一篇足矣

正则表达式

正则表达式

正则表达式中方括号“[]”内的浮点范围是啥意思? [复制]