鑑於像{大括號}的Javascript正則表達式 - 僅捕捉非轉義模式
{包括}什麼,但在Javascript中的字符串不是當他們被轉義 如{此}和工作的任何位置{括號}
我想要檢索
- 包括
- 花括號
- 撐
我一直試圖找到一種方法,但沒有看後面我難倒。
最重要的是不要獲得轉義內容。如果有必要,我可以在比賽中包括大括號的東西。
不幸的是,到目前爲止,我還管理是這樣
(?:[^//]){.*?}
的表達,但如果{是在目標文本的開頭不匹配。
任何人都可以幫助我嗎?謝謝。
鑑於像{大括號}的Javascript正則表達式 - 僅捕捉非轉義模式
{包括}什麼,但在Javascript中的字符串不是當他們被轉義 如{此}和工作的任何位置{括號}
我想要檢索
我一直試圖找到一種方法,但沒有看後面我難倒。
最重要的是不要獲得轉義內容。如果有必要,我可以在比賽中包括大括號的東西。
不幸的是,到目前爲止,我還管理是這樣
(?:[^//]){.*?}
的表達,但如果{是在目標文本的開頭不匹配。
任何人都可以幫助我嗎?謝謝。
我假設轉義字符是/
。
您可以使用與捕獲組以下的正則表達式,將保留您的值:
/(?:^|[^\/]){([^}]*)}/g
^^^^^^^
詳細:
(?:^|[^\/])
- 無論是開始的字符串或字符以外的字符/
{
- 字面{
([^}]*)
- 第1組捕獲比}
其他任何0+字符(添加{
進級到匹配{
和}
之間的最短窗口)}
- 字面}
。var rx = /(?:^|[^\/]){([^}]*)}/g;
var str = "{include} anything in {curly braces} but not when they are escaped like /{this} and work for any position of the {brace}";
var m, res = [];
while ((m = rx.exec(str)) !== null) {
res.push(m[1]);
}
console.log(res);
如果你有''''作爲轉義字符,你需要將'[^ \ /]'改成'[^ \\]'。 –
謝謝你Wiktor。這肯定會對我有用。我可以運行一些代碼來修剪輸出。 我對Javascript正則表達式並不是很強大,但出於興趣,你的方式和簡單的方式有什麼區別? ([^ \ /] | ^){。*?} 我並沒有真正得到?:或爲什麼([^}] *)的影響而不是。*? - 我在猜測我缺少的東西 我有興趣瞭解。謝謝 – Toby
'{。*?}'會匹配換行符之外的{{,0+個字符,儘可能少到第一個'}'(所以它會匹配一行中的字符串)。另外,懶惰的'*?'會通過char匹配強制char,這會減慢整個事情的速度。用'{[^}] *}'儘可能多地匹配'{',除'''之外的任何0+字符,直到第一個'}'(即使內部有換行符,他們會得到匹配)。由於匹配是貪婪的,匹配速度在這裏更快。最好的做法是:如果你可以擺脫'。*'/'。*?'模式,用更精確的等效替換它們。 –
是否與''\''或'/'逃脫? –
對不起 - 錯字的轉義字符。已更新 – Toby
那麼,它仍然是'/'? :)如果沒有,你需要在正則表達式中使用''\\'''而不是'\ /'。 –