2015-01-07 35 views
0

我希望使用此模式匹配所有值:@[\S]+。這將用於在評論中獲得@之後的所有名字。例如:使用RegExp和商店值匹配多個實例(JavaScript)

Here are some people: @Name1, @Name2, @Name3, @Name4

應該返回:["Name1", "Name2", "Name3", "Name4"]

我曾嘗試使用comment.match(/@[\S]+/ig)但這返回與@符號的數組。我試圖用括號封裝模式:comment.match(/@([\S]+)/ig)但這也沒有幫助。可能有超過10個匹配的名稱,因此RegExp無法使用,我寧願不必遍歷數組並將其排除。

幫助讚賞:)。

+0

你是什麼意思的RegExp無法使用? –

+0

我的意思是'RegExp。$ x'。 –

回答

1

使用落後

/(?<[email protected])\S+/ 

/編輯 我讀過,JavaScript不支持lookbehinds正面看。所以,我建議使用:

result.map(function(a) {a.slice(1)}) 

在每個

+0

這似乎給出了一個語法錯誤:未捕獲的SyntaxError:無效的正則表達式:/(?<= @)\ S + /:無效的組運行時如下: '「@ Name1和@ Name2」.match /(?<= @)\ S +/ig);' –

+0

我剛剛讀過Javascript正則表達式不支持lookbehinds。沒辦法做到這一點然後 –

+1

@KrzysztofWende:當然可以,使用捕獲組。 –

1

正如@KrzysztofWende您可以使用看看後面辦法,或者你可以使用捕捉組:

隨着正則表達式:

/@(\w+)/ig 

我將\S替換爲\w,否則逗號(,)匹配以及Name1

然後代碼讀取:

var myString = "Here are some people: @Name1, @Name2, @Name3, @Name4"; 
var myRegexp = /@(\w+)/ig; 
var match = myRegexp.exec(myString); 
alert(match[1]);//do something useful with match[1] 

或者如果你需要遍歷所有可能的匹配:

var myString = "Here are some people: @Name1, @Name2, @Name3, @Name4"; 
var myRegexp = /@(\w+)/ig; 
var match = myRegexp.exec(myString); 
while (match != null) { 
    alert(match[1]); 
    match = myRegexp.exec(myString); 
} 

該解決方案利用捕捉組:它號碼中的括號從開始10是整場比賽)。在這種情況下,組1因此是(\w+)

JSFiddle demo