正则表达式删除所有未跟随数字的句点

时间:2013-04-17 17:17:39

标签: javascript regex

我有str.replace(/.(?![0-9])/g, '') 但除了周期后的句号和数字外,它会删除所有内容 例如,“3.14”变为“.1”

我想要的是:

"3.14" -> "3.14"
"hello.world" -> "helloworld"
".hi." -> "hi"
"hi.25" -> "hi.25"

这样做的正则表达式是什么?

3 个答案:

答案 0 :(得分:3)

.是正则表达式中的元字符(默认情况下匹配除换行符之外的任何字符)。你需要逃脱它:

str.replace(/\.(?![0-9])/g, '')

str.replace(/[.](?![0-9])/g, '')

取决于您的偏好。

请注意,您可以[0-9]替换\d

答案 1 :(得分:3)

如果你没有逃脱点,则意味着“匹配任何角色。”

str.replace(/\.(?![0-9])/g, '')

答案 2 :(得分:1)

虽然其他答案都是正确的,但我会指出另一个选项(不使用预测):

str.replace(/\.+([^0-9]|$)/g, '$1')

$1是返回与第一组括号匹配的东西的特殊语法。


事实证明这个方法比先行(http://jsperf.com/regexp-look-ahead-speed,但我仍然认为它作为另一种选择很有意思。我个人觉得捕捉这样的令牌更加直观和灵活。但如果你需要速度,那就和其他人一起去。