我有一个采用路径形式的字符串,例如:
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);
我希望有一个更优雅的解决方案,如果可能的话,最好使用正则表达式!
谢谢
答案 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)
也就是说,最好的答案可能是使用split
和join
:
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);
如果要捕获组,请使用^.*?\/.*?\/(.*)$