JavaScript RegExp-查找某个字符之前的所有前缀

JavaScript RegExp-查找某个字符之前的所有前缀,javascript,regex,prefix,Javascript,Regex,Prefix,我有一个由斜杠(“/”)分隔的术语组成的字符串,例如: ab/c/def 我希望找到该字符串的所有前缀,直到出现斜杠或字符串结尾,即对于上面的示例,我希望得到: ab ab/c ab/c/def 我尝试过这样的正则表达式:/^(.*)[\/$]/,但它会返回一个匹配项-ab/c/,相应地,它会返回带括号的结果ab/c 编辑: 我知道使用split很容易做到这一点,我正在专门寻找一种使用RegExp的解决方案,你能不能在分隔符上拆分字符串 var result='ab/c/def'.spli

我有一个由斜杠(
“/”
)分隔的术语组成的字符串,例如:

ab/c/def
我希望找到该字符串的所有前缀,直到出现斜杠或字符串结尾,即对于上面的示例,我希望得到:

ab
ab/c
ab/c/def
我尝试过这样的正则表达式:
/^(.*)[\/$]/
,但它会返回一个匹配项-
ab/c/
,相应地,它会返回带括号的结果
ab/c

编辑:
我知道使用
split
很容易做到这一点,我正在专门寻找一种使用
RegExp

的解决方案,你能不能在分隔符上拆分字符串


var result='ab/c/def'.split(//\//g)您不能在分隔符上拆分字符串吗


var result='ab/c/def'.split(//\//g)我认为正则表达式不是您想要的。在数组上进行简单的拆分和循环可以得到结果

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);

有很多其他的方法可以做到这一点。

我认为正则表达式不是你想要的。在数组上进行简单的拆分和循环可以得到结果

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);
有很多其他方法可以做到这一点。

不,你不能用纯正则表达式来做到这一点。 为什么?因为您需要从字符串中的同一位置开始的子字符串,而正则表达式匹配不重叠的文本块,然后推进其索引以搜索另一个匹配项

好的,那么捕获组呢?只有知道输入字符串中有多少
/
-分隔块时,它们才有用。然后你可以使用

var s='ab/c/def';//共有三部分
log(/^(([^\/]+)\/[^\/]+)\/[^\/]+$/.exec);
//=>[“ab/c/def”,“ab/c”,“ab”]
不,你不能用纯正则表达式来做这件事。 为什么?因为您需要从字符串中的同一位置开始的子字符串,而正则表达式匹配不重叠的文本块,然后推进其索引以搜索另一个匹配项

好的,那么捕获组呢?只有知道输入字符串中有多少
/
-分隔块时,它们才有用。然后你可以使用

var s='ab/c/def';//共有三部分
log(/^(([^\/]+)\/[^\/]+)\/[^\/]+$/.exec);

//=>[“ab/c/def”、“ab/c”、“ab”]
您不能使用javascript中的正则表达式,但可以拆分部分并将它们分别连接在一起:

var-array=“ab/c/def”.split('/'),newArray=[],key=0;
while(值=数组[key++]){
push(key==1?值:newArray[newArray.length-1]+“/”+值)
}

log(newArray)在javascript中不能使用正则表达式,但可以拆分部分并将它们分别连接在一起:

var-array=“ab/c/def”.split('/'),newArray=[],key=0;
while(值=数组[key++]){
push(key==1?值:newArray[newArray.length-1]+“/”+值)
}
log(newArray)可能是这样的

var str=“ab/c/def”,
结果=str.match(/。+?(?=\/)/g)
.map((e,i,a)=>a[i-1]?a[i]=a[i-1]+e:e);
控制台日志(结果)可能是这样的

var str=“ab/c/def”,
结果=str.match(/。+?(?=\/)/g)
.map((e,i,a)=>a[i-1]?a[i]=a[i-1]+e:e);

控制台日志(结果)这不是OP想要的也许OP可以解释为什么split在这个场景中不可用?正如@Laurianti所提到的,我认为不可能编写具有不确定组数的正则表达式匹配。这不是OP想要的。或许OP可以解释为什么拆分在这种情况下不可用?正如@Laurianti所提到的,我认为不可能用不确定数量的组来编写正则表达式匹配?我认为只有正则表达式才有可能?我认为这是不可能的