Javascript 如何捕获regex.match()的剩余部分?
在JavaScript中,是否可以捕获正则表达式的剩余部分Javascript 如何捕获regex.match()的剩余部分?,javascript,regex,Javascript,Regex,在JavaScript中,是否可以捕获正则表达式的剩余部分.match() 例如: var string = "505 Swanton St"; var m = string.match(/\d+/); 我可以使用m[0]访问“505”,但m的数组中没有其他元素 是否有方法捕获字符串的剩余部分?您可以使用以下方法捕获模式前后的所有内容: 在这里: var string=“505斯旺顿街”; var m=string.match(/^(.*)(\d+)(.*)$/); log(JSON.st
.match()
例如:
var string = "505 Swanton St";
var m = string.match(/\d+/);
我可以使用m[0]
访问“505”,但m的
数组中没有其他元素
是否有方法捕获
字符串的剩余部分?您可以使用以下方法捕获模式前后的所有内容:
在这里:
var string=“505斯旺顿街”;
var m=string.match(/^(.*)(\d+)(.*)$/);
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;
我将其与更复杂的正则表达式一起用于解析各种单元。如果有一个无关的小数点,我的正则表达式将不会捕获它,它将位于余数中,因此我可以通过简单地查找余数中的点来判断输入中是否有错误
*编辑:修复了parseInput函数,因此它也会在最后一次匹配后获得剩余部分*Ahh。完美的谢谢。如果您只想将其存储在变量中,您可以使用replace并捕获与字符串参数$````匹配的所有内容(一个倒勾:我不能只显示一个),例如:var string=“505 Swanton St”;var after=string.replace(/\d+/g,“$”);console.log(之后)//Swanton StOoops,我注意到函数中有一个bug,上次匹配后它没有返回字符串的部分。“1a2b3c”返回“ab”的剩余部分。我修好了。
var string = "505 Swanton St";
var m = string.match(/\d+/);
var remainder = string.substring(0, m.index) + string.substring(m[0].length);
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;