Javascript 正则表达式在特定位置添加空格

Javascript 正则表达式在特定位置添加空格,javascript,regex,Javascript,Regex,我有一个14位数的数字,需要将其拆分为以下格式: xxx xxx xxx xxxxx 我有一个正则表达式,它从结尾开始每3个字符拆分一次,因为是向前看的 (?=(\d{3})+(?!\d)) 这给了我: xx xxx xxx xxx xxx 我尝试在regex101.com中使用lookbehind,但我得到一个模式错误 (?<=(\d{3})+(?!\d)) 如果这是我的问题,我如何使用lookbehind使其从字符串的开头开始,以及如何仅重复模式3次,然后切换到a\d{5}?您

我有一个14位数的数字,需要将其拆分为以下格式:

xxx xxx xxx xxxxx
我有一个正则表达式,它从结尾开始每3个字符拆分一次,因为是向前看的

(?=(\d{3})+(?!\d))
这给了我:

xx xxx xxx xxx xxx
我尝试在regex101.com中使用lookbehind,但我得到一个模式错误

(?<=(\d{3})+(?!\d))

如果这是我的问题,我如何使用lookbehind使其从字符串的开头开始,以及如何仅重复模式3次,然后切换到a\d{5}?

您可以使用类似这样的方法:

这方面的正则表达式是:

(?:\d{3})(?:\d{2}$)?
这基本上是说:我想要三个数字的组,除非它是字符串的结尾,在这种情况下我想要5


尽管如此,正如您对问题的评论,这并不是您通常使用regex的真正目的。

您可以使用如下内容:

这方面的正则表达式是:

(?:\d{3})(?:\d{2}$)?
这基本上是说:我想要三个数字的组,除非它是字符串的结尾,在这种情况下我想要5

尽管如此,正如您对问题的评论,这并不是您通常使用正则表达式的真正目的。

尝试以下方法:

(\d{3})(\d{3})(\d{3})
并替换为:

"$1 $2 $3 "
const regex=/\d{3}\d{3}\d{3}/g; 常量str=`1234567890134`; const subst=`1$2$3`; const result=str.replaceregex,subst; console.log结果 试试这个:

(\d{3})(\d{3})(\d{3})
并替换为:

"$1 $2 $3 "
const regex=/\d{3}\d{3}\d{3}/g; 常量str=`1234567890134`; const subst=`1$2$3`; const result=str.replaceregex,subst;
console.log结果;最好的答案可能是“不要为此使用正则表达式”。。。一个简单的for循环可能要容易得多。你可以尝试使用这个正则表达式来检查最终结果^\+\d{3}\d{5}$如何使用lookbehind使它从字符串的开头开始-我认为JavaScript正则表达式没有lookbehind特性。最好的答案可能是“不要为此使用正则表达式”。。。一个简单的for循环可能要容易得多。您可以尝试使用这个正则表达式来检查最终结果^\+\d{3}\d{5}$如何使用lookbehind以便它从字符串的开头开始-我认为JavaScript正则表达式没有look behind功能。我建议使用/[\d]{3}:\d{2}$?/。在我的测试脚本中,preg_split最后也捕获了34个。这就是我为什么在最后一个子模式中添加?:的原因,因此它不会被放入拆分数组。@Bernhard我已经更新了它,以停止使用捕获组,因为它们实际上没有被使用。我无法满足我的需要。它确实选择了正确的组,但如何在它们之间插入空格?不,for循环绝对不是这样做的正确方法。你得到所有匹配项,然后用空格连接它们?我建议使用/[\d]{3}?:\d{2}$?/。在我的测试脚本中,preg_split最后也捕获了34个。这就是我为什么在最后一个子模式中添加?:的原因,因此它不会被放入拆分数组。@Bernhard我已经更新了它,以停止使用捕获组,因为它们实际上没有被使用。我无法满足我的需要。它确实选择了正确的组,但如何在它们之间插入空格?不,for循环绝对不是正确的方法。你得到所有的匹配,然后用一个空格把它们连接起来。我看了太多了,似乎忘记了替换。谢谢。我看得太多了,好像忘记了替换。谢谢