2015-10-05 75 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];