JavaScript RegExp - 查找特定字符之前的所有前缀

JavaScript RegExp - find all prefixes up to a certain character

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

ab/c/def

我想找到这个字符串的所有前缀,直到出现斜杠或字符串结尾,即对于上面的示例,我希望得到:

ab
ab/c
ab/c/def

我试过这样的正则表达式:/^(.*)[\/$]/,但它 returns 是一个单独的匹配项 - ab/c/ 与括号内的结果 ab/c,因此。

编辑:

我知道这可以使用 split 轻松完成,我正在寻找使用 RegExp 的解决方案。

你不能只在分隔符上拆分字符串吗?

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

首先,你可以用/分割字符串。然后,遍历元素并构建 res 数组。

你不能用 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);

可能是这样

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