我想在javascript中匹配字符串,但只取得匹配字符串中的一部分。js正則表達式 - 獲取表達式之間的字符串
E.g我有字符串「我的測試字符串」和使用匹配函數來獲得唯一的「測試」:
var text = 'my test string';
var matched = text.match(/(?=my).+(?=string)/g);
IAM試圖得到它以這種方式,但它會回到「我的測試」。 我如何做到這一點只與'正則表達式'測試?
我想在javascript中匹配字符串,但只取得匹配字符串中的一部分。js正則表達式 - 獲取表達式之間的字符串
E.g我有字符串「我的測試字符串」和使用匹配函數來獲得唯一的「測試」:
var text = 'my test string';
var matched = text.match(/(?=my).+(?=string)/g);
IAM試圖得到它以這種方式,但它會回到「我的測試」。 我如何做到這一點只與'正則表達式'測試?
您可以使用一個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中不受支持,所以我建議使用捕獲組的方法。
'match'將會是:'[「我的測試字符串」]'。 'string.match'函數只返回$ 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];
使用捕獲組#1'/我的(?=字符串)/' – anubhava
相關:是什麼和...之間的不同 ?:, ?!和?=在正則表達式?](http://stackoverflow.com/questions/10804732/what-is-the-difference-between-and-in-regex)和[Javascript積極lookbehind替代](http:// stackoverflow。 COM /問題/ 27265515/JavaScript的正回顧後的替代)。你的第一組是一個向前看,而不是向後看。 JS不支持向後看。 – apsillers