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应该保持原样。是的,这个正则表达式将保持原样。