我有str.replace(/.(?![0-9])/g, '')
。
但它会删除除句点和句点后的数字之外的所有内容。
例如“3.14”变成“.1”
我想要的是:
"3.14" -> "3.14"
"hello.world" -> "helloworld"
".hi." -> "hi"
"hi.25" -> "hi.25"
这样做的正则表达式是什么?
我有str.replace(/.(?![0-9])/g, '')
。
但它会删除除句点和句点后的数字之外的所有内容。
例如“3.14”变成“.1”
我想要的是:
"3.14" -> "3.14"
"hello.world" -> "helloworld"
".hi." -> "hi"
"hi.25" -> "hi.25"
这样做的正则表达式是什么?
.
是正则表达式中的元字符(默认匹配除换行符以外的任何字符)。你需要逃避它:
str.replace(/\.(?![0-9])/g, '')
或者
str.replace(/[.](?![0-9])/g, '')
取决于你的喜好。
请注意,您可以替换[0-9]
为\d
.
如果您不转义点,则表示“匹配任何字符”。
str.replace(/\.(?![0-9])/g, '')
虽然其他答案是正确的,但我会指出另一个选项(不使用前瞻):
str.replace(/\.+([^0-9]|$)/g, '$1')
这$1
是返回匹配第一组括号的东西的特殊语法。
事实证明,这种方法比前瞻(http://jsperf.com/regexp-look-ahead-speed )慢,但我仍然认为它作为另一种选择很有趣。我个人发现像这样捕获令牌更加直观和灵活。但是,如果您需要速度,请与其他人一起去。