2015-06-20 55 views
3

在有人說它是thisthis的重複之前。 JavaScript沒有look behind,所以我一直在努力。它確實有look ahead如上所述here匹配字符但不包括那個字符和所有內容

我真正想做的是這樣的。我有: -
hey:blah,{'some':'obj','another':[4,5,0]}

我想提取一切後,但不包括第一:。 所以我的輸出是: -
blah,{'some':'obj','another':[4,5,0]}

我試圖至今: -
(:.+) //gives :blah,{'some':'obj','another':[4,5,0]} - 請注意,它有:
[^\w:].+ //gives ,{'some':'obj','another':[4,5,0]} - 不是我所期望的結果。缺少blah

我想在純正則表達式中這樣做,並試圖避免循環或任何字符串操作的那種。
到目前爲止,我的嘗試一直無濟於事。

+0

使用捕獲組。 –

+1

爲什麼你使用正則表達式來處理一個不是非常有效的JS對象的字符串表示?你打算如何處理由你的正則表達式導致的甚至不太有效的JS「對象」?請記住,正則表達式本身不會做任何事情;他們只是**匹配**。他們不「提取」任何東西,他們只是**匹配**。要做任何與匹配有關的事情,甚至調用它,你都必須從事JavaScript的「欺騙」,就像調用String#match一樣簡單。只要你這樣做,爲什麼會冒犯你的敏感性,投入一個'split',或'replace',或'slice'? – 2015-06-20 06:19:21

+0

我不知道你爲什麼會認爲可能需要循環;不是。至於「字符串操作」,正則表達式已經是「字符串操作符」,所以您仍然在操縱字符串。 – 2015-06-20 06:22:21

回答

2
^[^:]*:(.*$) 

你可以試試這個。抓組1。看看demo。

https://regex101.com/r/vH0iN5/1

+0

。 :( – shriek

+1

@shriek爲什麼不呢? – 2015-06-20 06:21:05

+2

@vks其實只要說'/:(.*)/'就簡單了,':'會匹配字符串中的第一個冒號,'。*'會匹配直到字符串結尾 – 2015-06-20 06:28:43

2

您可以使用string.replace

string.replace(/^[^:]*:/, ""); 
+0

會是我的第二選擇,是的,但我正在努力它從'javascript'沒有欺騙。 – shriek

+0

如果你想匹配,那麼除了捕獲組別之外別無其他選擇。 –

+0

爲什麼使用JS「欺騙」? – 2015-06-20 06:14:51

3

正則表達式

如果你不希望任何選擇都有,你可以看一下,AHED把它包:

(?=:(.*)) 

如果你想要去的,直到下列冒號:

(?=:([^:]*)) 

JavaScript代碼

因爲沒有選定,[0]將是空白。訪問[1]

/(?=:(.*))/.exec("hey:blah,{'some':'obj','another':[4,5,0]}")[1]; 
//       Use [1] not [0]      ^^ 

這就是說,有什麼不妥:

var str = "hey:blah,{'some':'obj','another':[4,5,0]}"; 
str.substr(str.indexOf(':') + 1); 
+0

嗯..我只是用'exec'解決方案得到''blah,{'some'「'。 'indexOf'也被接受,但這與[@Avinash Raj](http://stackoverflow.com/a/30950471/1204312)使用JavaScript的方法相同。我會傾向於將此標記爲正確的,但我也會用@Avinash的解決方案。 – shriek

+0

@shriek啊好吧,我糾正了這個:) – Downgoat

相關問題