[英]How to create a regular expression to match the last occurrence of something?
我有一個看起來像這樣的字符串:
one[two][three][four]
我想捕獲最后一個括號的內容,因此我嘗試了以下操作:
/\[(.*)\]$/
但是,返回的結果是:
two][three][four
如何形成正則表達式以僅匹配最后括號的內容?
您正在使用貪婪的量詞,它讀取first [
和last ]
之間的所有內容。 您可以使用以下正則表達式:
/\[([^\]]*)\]$/
如果您的]
不在字符串的末尾,則可以使用添加另一個字符類來匹配除末尾[
和]
任何字符:
/\[([^\]]*)\][^\[\]]*$/
但是,老實說,最好使用字符串操作而不是使用正則表達式來解決此問題,就像@gdoron的答案一樣。
實際上,對於您的情況,您甚至不需要正則表達式:
var str = 'one[two][three][four]';
alert(str.substring(str.lastIndexOf('[') +1, str.lastIndexOf(']')));
它獲取最后一個[
和]
之間的子字符串
正則表達式搜索從左到右開始。因此,它匹配two][three][four
..即使您使用.*?
也不能使用.*?
您應該使用此正則表達式
[^\[]+(?=\]$)
但是我更喜歡這個
var output=input.substring(input.lastIndexOf("[")+1,input.lastIndexOf("]"));
貪婪的表情是你的朋友。 他們將嘗試獲得他們所能擁有的一切……然后在無法做到時回溯。
為此,您可以在大多數表達式前加上^.*
,它將從頭開始嘗試並盡可能地進行匹配。
因此,如果您只是想捕獲結尾,請嘗試:
^.*\[(.*?)\]
讓我們分解一下:
^ # start of string
.* # as much as possible
\[ # opening square bracket
(.*?) # capture the minimum possible (non-greedy)
\] # closing square bracket
\\[[^\\[]*$
怎么樣? 這與后面沒有其他'['的'['相匹配,並在之后返回任何內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.