我有一个由斜杠('/'
)分隔的字符串组成的字符串,例如:
ab/c/def
我想找到这个字符串的所有前缀,直到出现斜杠或字符串结尾,即我希望得到的上述例子:
ab
ab/c
ab/c/def
我尝试过这样的正则表达式:/^(.*)[\/$]/
,但它会返回一个匹配 - ab/c/
,并带有带括号的结果ab/c
。
我知道使用split
可以轻松完成此操作,我正在寻找使用RegExp
的解决方案。
答案 0 :(得分:1)
为什么?因为您需要从字符串中的同一个位置开始的子字符串,而正则表达式匹配非重叠的文本块,然后推进其索引以搜索另一个匹配。
好吧,那么捕捉群组呢?如果您知道输入字符串中有多少/
个分隔的块,它们才有用。然后你可以使用
var s = 'ab/c/def'; // There are exact 3 parts
console.log(/^(([^\/]+)\/[^\/]+)\/[^\/]+$/.exec(s));
// => [ "ab/c/def", "ab/c", "ab" ]

然而,您不太可能知道有关输入字符串的许多详细信息。
您可以使用以下代码而不是正则表达式:
var s = 'ab/c/def';
var chunks = s.split('/');
var res = [];
for(var i=0;i<chunks.length;i++) {
res.length > 0 ? res.push(chunks.slice(0,i).join('/')+'/'+chunks[i]) : res.push(chunks[i]);
}
console.log(res);
&#13;
首先,您可以使用/
拆分字符串。然后,遍历元素并构建res
数组。
答案 1 :(得分:0)
我不认为正则表达式就是你所追求的。对数组进行简单的拆分和循环可以得到结果。
var str = "ab/c/def";
var result = str.split("/").reduce(function(a,s,i){
var last = a[i-1] ? a[i-1] + "/" : "";
a.push(last + s);
return a;
}, []);
console.log(result);
或其他方式
var str = "ab/c/def",
result = [],
parts=str.split("/");
while(parts.length){
console.log(parts);
result.unshift(parts.join("/"));
parts.pop();
}
console.log(result);
有很多其他方法可以做到。
答案 2 :(得分:0)
您无法在javascript中使用RegEx执行此操作,但您可以分割部分并将它们分别连接在一起:
var array = "ab/c/def".split('/'), newArray = [], key = 0;
while (value = array[key++]) {
newArray.push(key == 1 ? value : newArray[newArray.length - 1] + "/" + value)
}
console.log(newArray);
&#13;
答案 3 :(得分:0)
可能是这样的
var str = "ab/c/def",
result = str.match(/.+?(?=\/|$)/g)
.map((e,i,a) => a[i-1] ? a[i] = a[i-1] + e : e);
console.log(result);
答案 4 :(得分:-1)
你不能在分隔符上拆分字符串吗?
var result = 'ab/c/def'.split(/\//g);
&#13;