正则表达式范围内的转义点
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,我看到了:
“请记住,点不是字符类中的元字符,因此我们不需要使用反斜杠对其进行转义。”
所以我猜它的转义是不必要的......
【讨论】:
以上是关于正则表达式范围内的转义点的主要内容,如果未能解决你的问题,请参考以下文章