2015-03-31 41 views
2

我想在JavaScript中構建一個RegEx來重製通過document.URL得到的URL。在搜索中,我偶然發現了var match = str.match(/([^;]*;){2}/)[0];,它建立了一個字符串到第二次發生的;,我需要它建立到/的第N次發生。正則表達式來構建字符串,直到它遇到第N個匹配

雖然這只是需要一些更改,但我還想將JavaScript變量傳遞給它,而不是靜態的。我會更新我的答案,因爲我在JS RegEx上做了更多的研究併發布了適用於我的解決方案。

+0

當您搜索時,讓我建議使用RegEx構造函數而不是文字表示法。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp – 2015-03-31 13:22:07

+0

我在第一個答案發布後做了這個,所以我可以更好地理解它。感謝您的參考 – 2015-03-31 14:07:37

回答

0

你也可以使用這樣的片段(我修改你的regex使用非捕獲組,現在,我們不需要使用索引):

var n = 5; 
 
var re = new RegExp("(?:[^/]*/){" + n + "}"); 
 
var result = "Path/more/paths/here/andhere/file.php".match(re); 
 
console.log(result);

注:沒有必要一個RegExp構造函數中定義一個正則表達式時逃逸/符號。

+0

很高興爲你工作。如果我的回答對你有幫助,請考慮upvoting(參見[如何在堆棧溢出?](http://meta.stackexchange.com/questions/173399/how-to-upvote-on-stack-overflow)) 。 – 2016-10-09 11:13:49

0

以前的答案被刪除,似乎,但它是一個工作的解決方案,所以我會重新發布,並解釋給我最大的知識

var n = 5 var re = new RegExp('([^/]*/){' + n + '}'); var result = str.match(re)[0]

n是你想停止建設RegExp對象

RegExp對象是內置所以它創建一個字符串,直到它到達的第n個/

result是RegExp對字符串的運行並輸出陣列中的第一個結果

信用vks獲得答案。我沒有拿出他所做的。

+0

你欠一個vks :)。 – 2015-03-31 14:10:06

+0

是他的用戶名嗎?我在使用他的腳本時錯過了它。我一定會編輯我的帖子來提及他 – 2015-03-31 14:45:26

0

很難準確的告訴你以後在做什麼沒有更多的解釋,但在這裏就是我理解你的問題:

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/"] 
相關問題