2

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

我想要的是:

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

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

4

3 回答 3

3

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

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

或者

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

取决于你的喜好。

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

于 2013-04-17T17:19:37.280 回答
3

如果您不转义点,则表示“匹配任何字符”。

str.replace(/\.(?![0-9])/g, '')
于 2013-04-17T17:19:43.137 回答
1

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

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

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


事实证明,这种方法比前瞻(http://jsperf.com/regexp-look-ahead-speed ),但我仍然认为它作为另一种选择很有趣。我个人发现像这样捕获令牌更加直观和灵活。但是,如果您需要速度,请与其他人一起去。

于 2013-04-17T17:26:49.310 回答