2015-10-05 105 views
1

我想在javascript中匹配字符串,但只取得匹配字符串中的一部分。js正則表達式 - 獲取表達式之間的字符串

E.g我有字符串「我的測試字符串」和使用匹配函數來獲得唯一的「測試」:

var text = 'my test string'; 
var matched = text.match(/(?=my).+(?=string)/g); 

IAM試圖得到它以這種方式,但它會回到「我的測試」。 我如何做到這一點只與'正則表達式'測試?

+0

使用捕獲組#1'/我的(?=字符串)/' – anubhava

+0

相關:是什麼和...之間的不同 ?:, ?!和?=在正則表達式?](http://stackoverflow.com/questions/10804732/what-is-the-difference-between-and-in-regex)和[Javascript積極lookbehind替代](http:// stackoverflow。 COM /問題/ 27265515/JavaScript的正回顧後的替代)。你的第一組是一個向前看,而不是向後看。 JS不支持向後看。 – apsillers

回答

0

您可以使用一個capture group:

var match = text.match(/my (.*) string/g); 
# match[0] will be the whole string, match[1] the capture group 
match[1]; 

這仍然將整個字符串匹配,但您可以用match[1]獲得的內容。

其他一些正則表達式引擎有一個稱爲「lookbehind」的功能,但這在JavaScript中不受支持,所以我建議使用捕獲組的方法。

+0

'match'將會是:'[「我的測試字符串」]'。 'string.match'函數只返回$ 0組(多達匹配的次數) –

0

你需要你的正則表達式更改爲/my (.+) string/g和從它創建RegExp對象:

var regex = new RegExp(/my (.+) string/g); 

然後使用regex.exec(string)得到捕獲組

var matches = regex.exec(text); 

matches將是一個數組值:["my test string", "test"]

matches包含2組:$0$1$0是整場比賽,並且$1是第一個捕獲組。 $1括號內是:.+

你需要$1,這樣你就可以通過編寫matches[1]得到它:(?+)

//This will return the string you want 
var matched = matches[1];