如何在JavaScript's正则表达式的帮助下拆分字符串

How to split a string with the help of JavaScript's regex?

本文关键字:正则表达式 帮助 字符串 拆分 JavaScript      更新时间:2023-09-26

我需要将一个字符串拆分为一个或多个子字符串,每个子字符串包含不多于或少于两个点。例如,如果字符串是foo.boo.coo.too",那么得到以下数组的正则表达式是什么?: ["foo.boo.coo", "boo.coo.too"]。我希望有人能回答这个问题——我真的很佩服你,因为我已经编程好几年了,还没有很好地习惯正则表达式来自己解决这个特殊的问题。提前非常感谢你。让我知道你的身份,这样我就可以把你作为我正在创建的程序的贡献者。

RegEx不是这个问题的最佳解决方案,这里讨论了类似的问题:split-a- string -every-3-characters-from-back-javascript

一个好的javascript解决方案是一个像这样的javascript函数

function splitter(text){
  var parts = text.split(".");
  var times = parts.length - 2;
  var values = [];
  for(var index = 0; index<times;index++)
  {
    values.push(parts.slice(index,index+3).join("."));
  }
  return values;
}
splitter("too.boo.coo.too")
//=> Result tested on Chrome 25+ ["too.boo.coo", "boo.coo.too"]

我希望这对你有帮助

如果你想使用正则表达式试试Lookhead的东西,这可以帮助http://www.regular-expressions.info/lookaround.html

Regex本质上将返回非相交的结果,因此如果您希望从单个Regex中获得"所有匹配" -这是不可能的。

所以基本上你需要找到第一个匹配,然后从下一个位置开始寻找下一个匹配,等等;类似于这里描述的技术regex匹配与c#中的交集(这不是JavaScript,但思想是一样的)

您可以使用以下正则表达式,例如:

(?<=^|'.)((?:[^.]*'.){2}[^.]*?)(?=$|'.)

它确保它以点开始和结束,或者在行开始/行结束,并且在里面包含两个点,并且捕获导致第一次捕获。如果需要,可以用+代替*,以确保点之间至少存在一个符号。

但是您需要了解这种方法对于您正在解决的任务来说确实性能很差,因此可能使用其他方法(如split + for)将是更好的解决方案。