正则表达式执行只返回第一场比赛

42 javascript regex

我正在尝试在golfscript语法页面上实现以下正则表达式搜索.

var ptrn = /[a-zA-Z_][a-zA-Z0-9_]*|'(?:\\.|[^'])*'?|"(?:\\.|[^"])*"?|-?[0-9]+|#[^\n\r]*|./mg;
input = ptrn.exec(input);
Run Code Online (Sandbox Code Playgroud)

输入只是regexp的第一个匹配.例如: "hello" "world"应该返回,["hello", "world"]但它只返回["hello"].

pok*_*oke 63

RegExp.exec只能一次返回单个匹配结果.

为了检索多个匹配,您需要exec多次在表达式对象上运行.例如,使用简单的while循环:

var ptrn = /[a-zA-Z_][a-zA-Z0-9_]*|'(?:\\.|[^'])*'?|"(?:\\.|[^"])*"?|-?[0-9]+|#[^\n\r]*|./mg;

var match;
while ((match = ptrn.exec(input)) != null) {
    console.log(match);
}
Run Code Online (Sandbox Code Playgroud)

这会将所有匹配记录到控制台.

请注意,为了使其工作,您需要确保正则表达式具有g(全局)标志.此标志确保在对表达式执行某些方法后,lastIndex属性将更新,因此将上一个结果之后开始进一步调用.


Ead*_*del 19

可以match在字符串上调用方法以检索整个匹配集合:

var ptrn = /[a-zA-Z_][a-zA-Z0-9_]*|'(?:\\.|[^'])*'?|"(?:\\.|[^"])*"?|-?[0-9]+|#[^\n\r]*|./mg;
var results = "hello world".match(ptrn);
Run Code Online (Sandbox Code Playgroud)

results 是(根据正则表达式):

["hello", " ", "world"]
Run Code Online (Sandbox Code Playgroud)

match 规格在这里