我想在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