如何访问JavaScript正则表达式中的匹配组?
我想使用正则表达式匹配字符串的一部分,然后访问那个带括号的子字符串:
var myString = "something format_abc"; // I want "abc"
var arr = /(?:^|s)format_(.*?)(?:s|$)/.exec(myString);
console.log(arr); // Prints: [" format_abc", "abc"] .. so far so good.
console.log(arr[1]); // Prints: undefined (???)
console.log(arr[0]); // Prints: format_undefined (!!!)
我究竟做错了什么?
我发现上面的正则表达式代码没有问题:我测试的实际字符串是这样的:
"date format_%A"
报告“%A”未定义似乎是一个非常奇怪的行为,但它与这个问题没有直接关系,所以我打开了一个新的,为什么匹配的子字符串在JavaScript中返回“undefined”?
问题在于console.log
的参数类似于printf
语句,并且由于我记录的字符串( "%A"
)有一个特殊的值,它试图找到下一个参数的值。
您可以像这样访问捕获组:
var myString = "something format_abc";
var myRegexp = /(?:^|s)format_(.*?)(?:s|$)/g;
var match = myRegexp.exec(myString);
console.log(match[1]); // abc
以下是您可以用来获取每个匹配的第n个捕获组的方法:
function getMatches(string, regex, index) {
index || (index = 1); // default to the first capturing group
var matches = [];
var match;
while (match = regex.exec(string)) {
matches.push(match[index]);
}
return matches;
}
// Example :
var myString = 'something format_abc something format_def something format_ghi';
var myRegEx = /(?:^|s)format_(.*?)(?:s|$)/g;
// Get an array containing the first capturing group for every match
var matches = getMatches(myString, myRegEx, 1);
// Log results
document.write(matches.length + ' matches found: ' + JSON.stringify(matches))
console.log(matches);
var myString = "something format_abc";
var arr = myString.match(/bformat_(.*?)b/);
console.log(arr[0] + " " + arr[1]);
链接地址: http://www.djcxy.com/p/2149.html
上一篇: How do you access the matched groups in a JavaScript regular expression?
下一篇: Is there a regular expression to detect a valid regular expression?