在JavaScript中,是否可以捕获正则表达式的剩余部分.match()
?
例如:
var string = "505 Swanton St";
var m = string.match(/\d+/);
我可以使用m[0]
访问“505”,但m's
数组中没有其他元素。
有没有办法捕获string
的其余部分?
答案 0 :(得分:8)
您可以使用capture groups:
捕捉模式前后的所有内容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));
答案 1 :(得分:3)
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;
我用这个更复杂的正则表达式解析各种单位。如果有一个无关的小数点,我的正则表达式不会抓住它并且它将在剩余部分中,所以我可以通过简单地查找余数中的点来判断输入中是否存在错误
*编辑:修正了parseInput函数,因此它也获得了最后一次匹配后的余数*