我有str.replace(/.(?![0-9])/g, '')
但除了周期后的句号和数字外,它会删除所有内容
例如,“3.14”变为“.1”
我想要的是:
"3.14" -> "3.14"
"hello.world" -> "helloworld"
".hi." -> "hi"
"hi.25" -> "hi.25"
这样做的正则表达式是什么?
答案 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)慢,但我仍然认为它作为另一种选择很有意思。我个人觉得捕捉这样的令牌更加直观和灵活。但如果你需要速度,那就和其他人一起去。