javascript:用逗号替换所有点,十进制分隔符除外

javascript:用逗号替换所有点,十进制分隔符除外,javascript,regex,Javascript,Regex,我需要用逗号替换所有的点,而不是那些在数字中用作小数分隔符的点。 示例: 测试。测试->测试,测试 1.2测试->1.2测试 1.2.测试->1.2,测试 test.test aaa(bbb.dddd 1.2g)->测试,测试aaa(bbb.dddd 1.2g) 首先,我想我可以这样做: 仅匹配任意字母([a-z]*?[.])后面的千个点,但在这种情况下,第三个示例无法正常工作 你能给我一些线索吗?你可以在正则表达式中使用负前瞻: str = str.replace(/\.(?!\d)/

我需要用逗号替换所有的点,而不是那些在数字中用作小数分隔符的点。 示例:

  • 测试。测试
    ->
    测试,测试
  • 1.2测试
    ->
    1.2测试
  • 1.2.测试
    ->
    1.2,测试
  • test.test aaa(bbb.dddd 1.2g)
    ->
    测试,测试aaa(bbb.dddd 1.2g)
首先,我想我可以这样做:

  • 仅匹配任意字母([a-z]*?[.])后面的千个点,但在这种情况下,第三个示例无法正常工作

你能给我一些线索吗?

你可以在正则表达式中使用负前瞻:

str = str.replace(/\.(?!\d)/g, ',');


\(?!\d)
如果点后面没有数字,则匹配点。

如果没有lookibehind断言(在ES2018中引入),则可能有点棘手

str = str.replace(/^\.|(\D)\.|(\d)\.(?!\d)/g, "$1$2,");
这个通过了你所有的测试

或者,通过ES2018 lookbehind断言,您可以使用

str = str.replace(/(?<!\d)\.|\.(?!\d)/g, ",");

str=str.replace(/)你想如何处理“test.5”中的点?保持原样。它也会保留
1.2fs
,但OP只想保留在数字中用作小数分隔符的点,或者我可能不够精确。1.2fs应该保持原样。是的,这个正则表达式将保持原样。