0

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

4

2 回答 2

0

正则表达式本质上会返回不相交的结果,所以如果你想从一个正则表达式中获得“所有匹配”——这是不可能的。

所以基本上你需要找到第一个匹配,然后从下一个位置开始寻找下一个匹配,依此类推;类似于此处描述的这种技术正则表达式与 C# 中的交集匹配(它不是 JavaScript,但想法是相同的)

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

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

它确保它以点开头和结尾,或者在行的开头/结尾,并且内部恰好包含两个点,并在第一次捕获时捕获结果。如果需要,您可以将 * 替换为 + 以确保点之间至少存在一个符号。

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

于 2013-03-21T11:43:12.170 回答
0

正则表达式是针对这个问题的,不是最好的解决方案,这里讨论了一个类似的问题:split-a-sting-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 Stuff,这可能会有所帮助http://www.regular-expressions.info/lookaround.html

于 2013-03-21T13:04:01.617 回答