2011-08-04 163 views
4
"unescape('awefawef')unescape('efawefwf')unescape('awefawef')" 
.match(/unescape\(\'([^\)]+)\'\)/gi) 

如果有多個unescape(...)匹配則返回與unescape的匹配,但我只需要()括號內的內容。Javascript匹配:僅返回子模式匹配的內容

謝謝;)

所需輸出:

['awefawef','efawefwf','awefawef'] 
+0

當然,添加到主帖。 – Somebody

回答

4

您將需要使用ungreedy運營商只匹配括號中的內容,並讓所有的結果,你會需要調用正則表達式.exec多次在同一個字符串上。

var regex = /unescape\('(.+?)'\)/ig; 
var string = "this unescape('foo') is a unescape('bar') test"; 
var result; 
while(result = regex.exec(string)) 
    console.log(result[1]); 
+0

你能給一些關於JavaScript正則表達式的非常規運算符的鏈接嗎?謝謝:) – Somebody

+0

這不是特定於JS,但適用於它: http://www.regular-expressions.info/repeat.html#greedy –

+0

嗯,爲什麼.match方法不能用這個不真實的運算符? – Somebody

1

您可以從RegExp.$1得到它。

"unescape('awefawef')unescape('efawefwf')unescape('awefawef')".match(/unescape\(\'([^\)]+)\'\)/gi); 
console.log(RegExp.$1); //awefawef 
+1

太酷了,不知道。無論如何,這不是全球性的嗎?其餘的搭配是什麼? – Somebody

1

如果你想使用捕獲,你可以使用Regex.exec()。使用您的情況:

var str = "unescape('foo')unescape('bar')unescape('baz')"; 
var regex = /unescape\(\'([^']+)\'\)/g; 

var result; 
while(result = regex.exec(str)){ 
    alert(result[1]); 
} 

編輯:修正了原來的答案

+0

是的,似乎更好的循環exec直到需要的結果或直到exec返回null。謝謝;) – Somebody