我正在尝试用JavaScript构建一点RegEx,以重新生成通过document.URL
获得的URL。在搜索过程中,我偶然发现了var match = str.match(/([^;]*;){2}/)[0];
,它构建了一个直到第二次出现;
的字符串,我需要它来构建直到第N次出现/
。
虽然这只需要一些更改,但我也想向它传递一个JavaScript变量,而不是让它是静态的。我会更新我的答案,因为我对JS RegEx做了更多的研究,并发布了一个适合我的解决方案。
您也可以使用这样的代码段(我修改了您的正则表达式以使用非捕获组,现在,我们不需要使用索引):
var n = 5;
var re = new RegExp("(?:[^/]*/){" + n + "}");
var result = "Path/more/paths/here/andhere/file.php".match(re);
console.log(result);
注意:在RegExp
构造函数中定义正则表达式模式时,不需要转义/
符号。
如果没有更多的解释,很难准确地说出你想要什么,但以下是我如何解释你的问题:
function getPath(url, depth) {
var match, re, results = [];
for (var i = 1; i <= depth; i++) {
re = new RegExp('([^/]*/){' + i + '}');
match = url.match(re);
if (match !== null) { results.push(match[1]); }
}
return results;
}
并将其用于一个示例:
getPath('http://stackoverflow.com/questions/29369626/regex-to-build-string-till-it-encounters-nth-match', 5);
// returns
["http:/", "/", "stackoverflow.com/", "questions/", "29369626/"]
前面的答案似乎被删除了,但这是一个有效的解决方案,所以我会转发它,并尽我所知解释它
var n = 5
var re = new RegExp('([^/]*/){' + n + '}');
var result = str.match(re)[0]
n
是您希望停止构建RegExp对象的位置
RegExp对象被构建为创建一个字符串,直到它到达第n个/
result
是针对字符串运行RegExp,并在数组中输出第一个结果
感谢vks的回答。我没有想到这个,他想到了。