我想要獲取由一些自定義「括號」包圍的文本,即:{{...}}或@(...)@高效正則表達式適用於「環繞」狀況,如{{....}}
當括號中只有一個字符的長度(即:{..}),它是:
/{(.*?)}/g
並有一個更有效的解決方案,採用「未端托架」圖案:
/{([^}]*)}/g
但是對於雙字符括號,只有這個作品
/{{(.*?)}}/g
我無法找到一個有效的解決方案,就像一個字符的情況。
有沒有?
我想要獲取由一些自定義「括號」包圍的文本,即:{{...}}或@(...)@高效正則表達式適用於「環繞」狀況,如{{....}}
當括號中只有一個字符的長度(即:{..}),它是:
/{(.*?)}/g
並有一個更有效的解決方案,採用「未端托架」圖案:
/{([^}]*)}/g
但是對於雙字符括號,只有這個作品
/{{(.*?)}}/g
我無法找到一個有效的解決方案,就像一個字符的情況。
有沒有?
我假設你不需要擔心嵌套。如果你願意,你不應該使用正則表達式。
這裏有一種方法做你想要什麼,而無需使用非貪婪匹配(*?
):
/{{([^}]|}[^}])*}}/g
英文:
這通過具有n個單獨的分支,一個用於非捲曲,一個用於捲曲並概括出到n-大括號非捲曲,一個兩個花括號和非捲曲等
在你的特殊情況下,你可以只寫:
/{{(}?[^}])*}}/g
BTW:該組可能不需要被捕獲。例如:
/{{(?:}?[^}])*}}/g
謝謝!這使我從很多頭痛中救了我:) –
我以前不知道(?:)。謝謝:) –
@勞倫斯:這是微不足道的使用模式嵌套分隔符,如[這個答案](http://stackoverflow.com/questions/4031112/regular-expression-matching/4034386#4034386)所示。你無法用DFA解決'(。+)\ 1',但這並沒有阻止任何人在正則表達式中使用它。真正的問題是Javascript的模式太原始了。更糟糕的是,你無法在Javascript中使用Unicode模式匹配(每UTS#18),因爲它是** [所有被調查語言中排名第一的最差的**](http://training.perl.com/ OSCON2011/index.html)用於Unicode模式匹配。即使PHP更好。 – tchrist
假設你有{{...}}
var subject= "{{i am legend}}";
var pattern = /(?:{{)([\w\W]*)(?:}})/;
var text= subject.match(pattern)[1];
您可能需要包括取決於哪個 「括號」 你選擇
在大多數情況下,這比OP開始時效率要低很多*。這也是不正確的,因爲它會將'{{abc}} def {{ghi}}'視爲一場比賽。 –
如果有,會發生什麼逃逸{{嵌套{{括號}}? }} –
目前我不需要嵌套括號。我只需要括號中的水平,一個表示變量的{..}和一個表示內部js代碼的@ {..} @。這是一個簡單的模板。 –