我想在JavaScript中構建一個RegEx來重製通過document.URL
得到的URL。在搜索中,我偶然發現了var match = str.match(/([^;]*;){2}/)[0];
,它建立了一個字符串到第二次發生的;
,我需要它建立到/
的第N次發生。正則表達式來構建字符串,直到它遇到第N個匹配
雖然這只是需要一些更改,但我還想將JavaScript變量傳遞給它,而不是靜態的。我會更新我的答案,因爲我在JS RegEx上做了更多的研究併發布了適用於我的解決方案。
我想在JavaScript中構建一個RegEx來重製通過document.URL
得到的URL。在搜索中,我偶然發現了var match = str.match(/([^;]*;){2}/)[0];
,它建立了一個字符串到第二次發生的;
,我需要它建立到/
的第N次發生。正則表達式來構建字符串,直到它遇到第N個匹配
雖然這只是需要一些更改,但我還想將JavaScript變量傳遞給它,而不是靜態的。我會更新我的答案,因爲我在JS RegEx上做了更多的研究併發布了適用於我的解決方案。
你也可以使用這樣的片段(我修改你的regex使用非捕獲組,現在,我們不需要使用索引):
var n = 5;
var re = new RegExp("(?:[^/]*/){" + n + "}");
var result = "Path/more/paths/here/andhere/file.php".match(re);
console.log(result);
注:沒有必要一個RegExp
構造函數中定義一個正則表達式時逃逸/
符號。
很高興爲你工作。如果我的回答對你有幫助,請考慮upvoting(參見[如何在堆棧溢出?](http://meta.stackexchange.com/questions/173399/how-to-upvote-on-stack-overflow)) 。 – 2016-10-09 11:13:49
以前的答案被刪除,似乎,但它是一個工作的解決方案,所以我會重新發布,並解釋給我最大的知識
var n = 5 var re = new RegExp('([^/]*/){' + n + '}'); var result = str.match(re)[0]
n
是你想停止建設RegExp對象
RegExp對象是內置所以它創建一個字符串,直到它到達的第n個/
的result
是RegExp對字符串的運行並輸出陣列中的第一個結果
信用vks獲得答案。我沒有拿出他所做的。
你欠一個vks :)。 – 2015-03-31 14:10:06
是他的用戶名嗎?我在使用他的腳本時錯過了它。我一定會編輯我的帖子來提及他 – 2015-03-31 14:45:26
很難準確的告訴你以後在做什麼沒有更多的解釋,但在這裏就是我理解你的問題:
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/"]
當您搜索時,讓我建議使用RegEx構造函數而不是文字表示法。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp – 2015-03-31 13:22:07
我在第一個答案發布後做了這個,所以我可以更好地理解它。感謝您的參考 – 2015-03-31 14:07:37