我有這樣的信息:表達常規 - 反向引用
- 目標= 16-10-2017
- 模式=
/([0123][0-9])-(\1)-(\d{4})/g
我的問題。爲什麼「後退參考」不起作用?我想了解語法的功能以及我犯了什麼錯誤。因爲在我的理解中,第一組([0123][0-9])
應該考慮數字「10」和「16」,或者不是?爲什麼?
我有這樣的信息:表達常規 - 反向引用
/([0123][0-9])-(\1)-(\d{4})/g
我的問題。爲什麼「後退參考」不起作用?我想了解語法的功能以及我犯了什麼錯誤。因爲在我的理解中,第一組([0123][0-9])
應該考慮數字「10」和「16」,或者不是?爲什麼?
匹配的兩個部分[0123]
和[a-9]
numbers
隨後兩個部分反向引用只與使用相應的c捕獲的文本匹配確定組。它不重複該模式,而是已經獲取的值。
在您的情況下,\1
嘗試匹配16
之後的第一個-
。
在JS的正則表達式,則不能使用可以在PCRE/Onigmo使用(?1)
/\g<1>
子程序調用,但用戶還可以定義子模式作爲變量和動態生成圖案:
var target = "16-10-2017";
var p1 = "[0123][0-9]";
var rx = new RegExp("(" + p1 + ")-(" + p1 + ")-(\\d{4})", "g");
console.log(target.replace(rx, "$1/$2/$3"));
我很欣賞所有評論。 @WiktorStribiżew您的意見正是我所需要的。理論是目標。謝謝 – DNick
也許你有你的正則表達式改變這個(([0123][0-9])-){2}(\d{4})
,這意味着它應該由-
(([0123][0-9])-){2}
這種方法有兩個瓶頸:1)如果OP需要捕獲兩個組(並且似乎OP需要,因爲兩者都被捕獲),2)在其他情況下,當模式不能以這種方式重複時(即,當它們毗鄰)。如果目的是提取/刪除子字符串,那麼它是當前場景的完美解決方案。 –
謝謝@WiktorStribiżew爲您的信息,我感謝它 –
@YCF_L。謝謝你分享你的知識。 – DNick
反向引用的工作原理類似於* *本身之前匹配的字符串*的複製/粘貼。 – revo
'(\ 1)'打算做什麼?它不應該是'(\ d {2})'嗎? – Arg0n