regex来构建字符串,直到遇到第N个匹配项

regex to build string till it encounters Nth match

本文关键字:遇到 构建 字符串 regex      更新时间:2023-09-26

我正在尝试用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的回答。我没有想到这个,他想到了。