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

时间:2016-09-22 13:48:08

标签: javascript regex prefix

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

ab/c/def

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

ab
ab/c
ab/c/def

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

编辑:

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

5 个答案:

答案 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;
&#13;
&#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执行此操作,但您可以分割部分并将它们分别连接在一起:

&#13;
&#13;
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;
&#13;
&#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)

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

&#13;
&#13;
var result = 'ab/c/def'.split(/\//g);
&#13;
&#13;
&#13;