我试图在字符串中删除虚线周围的空格,但只有在数字中:
10 - 89 - 90应该变成10-89-90。
但是,当在字符串中时,它们应该保留空格:
A - Z应该保持为A - Z。和90 - older一样,90 - older也应该留下来。
所以只有当破折号两边都有数字的时候,空格才会被移除。
我试过这个:
item = item.replace(/(\d) - (\d)/g, "$1-$2");
但什么都没发生。
编辑:我的破折号确实被Excel变成了em破折号,但我接受了答案,因为它确实预见到了一个我很可能遇到的问题(在破折号之间只有一个数字)。
发布于 2021-09-06 21:27:25
使用(\d) - (\d)将适用于10 - 89 - 90,但它不适用于10 - 8 - 9,因为第二个\d中的个位数已经匹配。
在每个数字的左边和右边必须至少有一个空格,这也不能与10 - 89 -90中的最后一个空格相匹配。
您可以使用
\b(\d+)\s*-\s*(?=\d+\b)\b(\d+)字边界,捕获1+数字\s*-\s*匹配可选空格字符之间的连字符(?=\d+\b)正前瞻,断言1+数字,后面跟着单词边界而代之以
$1-
[
"0 - 89 - 90",
"90 - older"
].forEach(
item => console.log(item.replace(/\b(\d+)\s*-\s*(?=\d)/g, "$1-"))
)
当支持后视中的量词时:
[
"0 - 89 - 90",
"90 - older"
].forEach(
item => console.log(item.replace(/(?<=\b\d+)\s*-\s*(?=\d+\b)/g, "-"))
)
https://stackoverflow.com/questions/69080412
复制相似问题