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

时间:2013-03-21 09:01:11

标签: javascript regex

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

2 个答案:

答案 0 :(得分:0)

正则表达式本质上会返回非交叉结果,所以如果你想要一个正则表达式的“所有匹配” - 那是不可能的。

所以基本上你需要找到第一场比赛,然后从下一个位置开始寻找下一场比赛,依此类推;像这里描述的这种技术regex matches with intersection in C#(它不是JavaScript,但想法是一样的)

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

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

它确保它以点开始或结束,或者在行的开始/结束处,并且内部恰好包含两个点,并在第一次捕获时捕获结果。您可以用*替换*以确保点之间至少存在一个符号(如果需要)。

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

答案 1 :(得分:0)

RegEx是针对此问题而不是此处讨论类似问题的最佳解决方案: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