2014-01-30 27 views
2

我在Javascript匹配字符串對正則表達式如下:非捕獲組在Javascript正則表達式

(?:new\s)(.*)(?:[:]) 

我使用功能上的字符串是「新標籤:VAR;」 它支持的返回值只是「標記」,但它會返回一個包含「新標記:」的數組以及所需的結果。

我發現我可能需要使用lookbehind,但由於它不支持JavaScript,所以我有點失落。

預先感謝您!

回答

1

好了,我真的不明白你爲什麼做出這樣的複雜的正則表達式爲你想要的東西提取:

(?:new\\s)(.*)(?:[:]) 

而它可以使用以下方法解決:

s = "new Tag:"; 
var out = s.replace(/new\s([^:]*):.*;/, "$1") 

其中只有一個捕獲組是您正在尋找的捕獲組。

+0

和@anubhava狀態,'。*'是「貪婪」並不是一個好主意,因爲如果您的字符串中有兩列或更多列,只匹配最後一個。 – zmo

+0

謝謝你,它做到了訣竅:) – user1501404

+0

那個過分貪婪的操作員讓我瘋狂。 – MCB

1
  • \\s(雙轉義)僅用於創建RegExp實例。
  • 此外,您的正則表達式正在使用.*中的貪婪模式,這可能會比預期的匹配更多。

使它非貪婪:

(?:new\s)(.*?)(?:[:]) 

或更好的使用否定:

(?:new\s)([^:]*)(?:[:]) 
+0

我的不好,多餘的'\'是爲逃避。 否則,string.match()仍然會返回一個數組,其中包含兩個條目 – user1501404