正则表达式在第二个斜杠实例后捕获整个字符串

时间:2018-08-29 12:22:34

标签: javascript regex

我有一个采用路径形式的字符串,例如:

Year 1 / English / Writing / How to write your name

我需要产生一个字符串,该字符串包含第二个正斜杠之后的所有内容。在上面的示例中,这意味着我想要的输出将是:

Writing / How to write your name

关于输出URL的最后部分或在文件路径中获取特定的文件夹名称,我已经看到了许多问题/答案,但是到目前为止,它们都对我没有帮助。我承认由于时间的限制,我的研究还不够广泛。

我的第一个想法是使用javascript之类的方法来做到这一点

var input = "Year 1 / English / Writing / How to write your name";
var firstCut = input.substr(input.indexOf('/') + 1);
var secondCut = firstCut.substr(firstCut.indexOf('/') + 1);

我希望有一个更优雅的解决方案,如果可能的话,最好使用正则表达式!

谢谢

3 个答案:

答案 0 :(得分:2)

您可以使用replace ing方法:

var s = "Year 1 / English / Writing / How to write your name";
var result = s.replace(/^(?:[^\/]*\/){2}\s*/, '');
console.log(result);

该模式将匹配(.replace最终将其删除):

  • ^-字符串的开头
  • (?:[^\/]*\/){2}-两次出现
    • [^\/]*-除/以外的0多个字符
    • \/-一个/字符
  • \s*-超过0个空格

如果没有匹配项,则结果将等于输入字符串。

匹配的方法可能看起来像

var s = "Year 1 / English / Writing / How to write your name";
var result = (m = s.match(/^(?:[^\/]*\/){2}\s*([\s\S]+)/)) ? m[1] : "";
console.log(result);

在初始文本与上述模式匹配之后,([\s\S]+)模式将在字符串结尾之前将任何一个或多个字符捕获到组1中。

如果没有匹配项,结果将为空字符串。

答案 1 :(得分:1)

此正则表达式将以[entire string match, captured group]的形式返回一个数组。它从字符串的开头开始,匹配两组/以外的任意数量的字符,后跟/,然后捕获从那里到字符串末尾的其余字符

let test = "Year 1 / English / Writing / How to write your name"

let result = /^(?:[^\/]+\/){2}(.+)/.exec(test)[1]

console.log(result)

也就是说,最好的答案可能是使用splitjoin

let test = "Year 1 / English / Writing / How to write your name"

let result = test.split(/\s*\/\s*/).slice(2).join(" / ")

console.log(result)

答案 2 :(得分:0)

您可以使用^.*?\/.*?\/删除不需要的部分。

例如。

    var string = 'Year 1 / English / Writing / How to write your name';
    var result = string.replace(/^.*?\/.*?\//, '');
    console.log(result);

如果要捕获组,请使用^.*?\/.*?\/(.*)$

RegExpr Link