2017-02-08 28 views
0

例如:正則表達式匹配像/^String1中(任何)(String2的或STRING3)/路徑

String1: Books>Programming> 
String2: Databases> 
String3: Languages> 
Anything: '' 

由下面的正則表達式匹配:

/^Books>Programming>(Databases>|Languages>)/ 

現在,讓我們說什麼是不是空的,例如「whatever1>」,正則表達式應該如何改變?

我試過lookaround但沒有運氣,我可能會錯過一些明顯的東西。

+0

使用否定的字符類 - '[^>] *',看到https://regex101.com/r/UU93P7/1 –

回答

0

如果我把你corectly要匹配像圖書>程序> [任何]>路徑(數據庫> |語言>)。如果是這樣,你可以這樣做。

let String1 = "Books>Programming>", 
    String2 = "Databases>", 
    String3 = "Languages>" 

let regex = new RegExp(`${String1}(.*?)>(?:${String2}|${String3})`) 

該方法的好處是您可以隨意修改變量並在執行代碼時創建修改的正則表達式,因此它不是硬編碼的。

現在,如果你想測試,如果字符串匹配這個模式,你可以使用:

regex.test("Books>Programming>whatever1>Databases>") 

如果你想extrat whatever1從這個只需使用:

"Books>Programming>abc>Databases>".match(regex)[1] 
+0

這樣的作品,但它匹配String2和String3都不存在的情況。也許在描述中不明確,但至少有一個必須在那裏,即'Books> Programming> whatever1>'不能匹配。 – SC1000

+0

@ SC1000您是否測試過代碼?因爲它按照你的期望工作。 :/ [嘗試](https://regex101.com/r/0o3Tdo/1)我沒有看到這個錯誤。 –

+0

感謝您的鏈接,我不得不在mongoDB中測試它,起初它似乎沒有按需要工作。接受你的答案,謝謝。 – SC1000

0

您可以使用String.prototype.split,以達到不使用正則表達式的目的。就像這樣:

function getParts(str) { 
 
    var parts = str.split(">"); // split the string by ">" 
 
    if(!parts[parts.length - 1].length) // if the last part is empty 
 
    parts.pop(); // remove it 
 
    
 
    return parts; // return the array of the parts (ordered by default) 
 
} 
 

 
console.log(getParts("Something>Books>Another thing>Programming>"));

+0

謝謝,我必須堅持使用正則表達式(因爲這也是一個mongoDB查詢所需要的) – SC1000

相關問題