我有一段我想從中抽取字符串的段落由雙方括號"[[" ... "]]"
包圍。括號內有一些包含條的字符串|我想省略這些。我創建了以下正則表達式\[\[([^|]+?)\]\]/g
這個正則表達式完美無瑕地工作,但它返回字符串與周圍的方括號。有類似的問題可以通過使用str.split來解決,但是我匹配200個以上的字符串,它可能會降低性能,因此我只會喜歡正則表達式。忘了提及這是一個很長的段落,我需要所有的匹配,因此我指定/ g標誌來獲得所有匹配的數組。如何在沒有令牌的情況下匹配兩個令牌之間的字符串
0
A
回答
4
你的正則表達式看起來不錯。我認爲你只是看着結果的錯誤部分。當你得到一個匹配時,Regex.exec()
返回一個數組。索引0包含完整匹配,例如"[[value]]"
,並且後面的索引包含隱藏在內的每個子匹配,例如, "value"
。所以看看match[1]
而不是match[0]
。
要處理多個匹配,加上g
標誌,並使用while
循環運行Regex.exec()
多次 - 這將返回一個結果陣列對於每個連續的比賽,直到不再發現匹配,並返回null
。您可以將每個結果推送到一個數組中。你的正則表達式仍然是一樣的壽。
var inputs = [
"foo [[value]] bar",
"foo [[val1|val2]] bar",
"foo [[value1]] bar [[value|2]] fizz [[value3]] buzz",
];
console.clear();
for(var i = 0; i < inputs.length; i++) {
var re = /\[\[([^|]+?)\]\]/g;
var match;
var matches = [];
while((match = re.exec(inputs[i])) !== null) {
matches.push(match[1]);
}
console.log(inputs[i]);
console.log(matches);
}
相關問題
- 1. 匹配兩個不同令牌之間的任何字符串
- 2. Strtok(),沒有令牌匹配
- 3. 沒有匹配的鎖定令牌
- 4. 在沒有strtok的情況下在C中進行令牌化()
- 5. VIM圖案而不另一個給定令牌匹配兩個令牌其間
- 6. 如何正則表達式中的兩個令牌之間的字符串?
- 7. 在沒有瀏覽器的情況下獲取訪問令牌
- 8. Django:在沒有CSRF令牌的情況下重置密碼
- 9. 匹配雙令牌
- 10. 忽略令牌字符中的令牌?
- 11. 如何在兩個已知令牌之間進行最小匹配?
- 12. 如何在沒有任何登錄的情況下獲取訪問令牌?
- 13. 計算匹配字符串中的模式的令牌數
- 14. 如何在沒有用戶輸入的情況下生成kerberos令牌
- 15. 如何在沒有應用的情況下擴展Facebook訪問令牌?
- 16. 如何在沒有付款過程的情況下更新Sage Pay令牌
- 17. 如何在沒有訪問令牌的情況下獲取Google通訊錄?
- 18. 如何在沒有令牌的情況下聯繫Facebook應用程序用戶
- 19. 分割字符串令牌
- 20. 分割字符串/令牌
- 21. 令牌化字符串C
- 22. 字符串令牌化
- 23. 定義令牌以匹配任何字符串
- 24. Java:通過輸入字符串的令牌讀取令牌
- 25. CorePlot - '@'令牌之前的預期令牌
- 26. 去除令牌之間的換行符
- 27. JavaCC令牌不匹配
- 28. Flask_form:CSRF令牌不匹配
- 29. CSRF不匹配令牌
- 30. phpMyAdmin 4.6.2令牌不匹配
你去優化前,測量與1000串的解決方案。如果速度慢,開始考慮優化 - 直到那時,找到更好的方法來做:-) – Amit
JS沒有向後看。也許是一個捕獲組? – Oriol
你的正則表達式適合我。請使用正則表達式顯示您正在使用的JS。結果如何返回取決於您使用哪種正則表達式方法以及是否指定「g」標誌。 – nnnnnn