Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何捕获regex.match()的剩余部分?_Javascript_Regex - Fatal编程技术网

Javascript 如何捕获regex.match()的剩余部分?

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

在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.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;