在 JavaScript 中,是否可能捕获正则表达式 .match()
的其余部分?
例如:
var string = "505 Swanton St";
var m = string.match(/\d+/);
我可以使用m[0]
访问"505",但是m
数组中没有其他元素。
有没有办法捕获string
的其余部分?
在 JavaScript 中,是否可能捕获正则表达式 .match()
的其余部分?
例如:
var string = "505 Swanton St";
var m = string.match(/\d+/);
我可以使用m[0]
访问"505",但是m
数组中没有其他元素。
有没有办法捕获string
的其余部分?
你可以使用捕获组来捕获模式之前和之后的所有内容:
var string = "505 Swanton St";
var m = string.match(/^(.*?)(\d+)(.*)$/);
这里:
m[0] == "505 Swanton St"; // the entire matched pattern
m[1] == ""; // first group
m[2] == "505"; // second group
m[3] == " Swanton St"; // third group
var string = "505 Swanton St";
var m = string.match(/^(.*?)(\d+)(.*)$/);
console.log(JSON.stringify(m));
string.match
和regexp.exec
返回带有额外属性index
的特殊数组,该属性是匹配的第一个字符的索引。因此,您也可以通过以下方式获取其余部分:
var string = "505 Swanton St";
var m = string.match(/\d+/);
var remainder = string.substring(0, m.index) + string.substring(m[0].length);
如果与带有/g标志和regex.exec
函数的正则表达式一起使用,您需要保持将匹配的部分与下一个匹配的开始之间的部分进行拼接。
function parseInput(input) {
parseInput.regex.lastIndex = 0;
var matches = [];
var remainder = "";
var prevIndex = 0;
while((match = parseInput.regex.exec(input)) !== null) {
matches.push(match);
remainder += input.substring(prevIndex, match.index);
prevIndex = parseInput.regex.lastIndex;
}
if(matches.length) {
remainder += input.substring(prevIndex); // after last result
return {"matches": matches, "remainder": remainder};
} else {
return {"matches": null, "remainder": input};
}
}
parseInput.regex = /\d+/g;