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