在命名组中获取多个结果
Get Multiple Results in Named Groups
我正在尝试使用命名组对正则表达式的结果进行分组。命名组只得到第一个结果,尽管设置了全局标志,并且进行字符串匹配可以获得所有匹配,但不对它们进行分组。
我已经设置了 g 和 m 标志。
var REGEX = new RegExp(/^\s*(?<incorrect>.*\S*.*)\n*(?<corrected>.*\S*.*)[\r|\n]*/, "gm");
var mc = selectedText.match(REGEX);
var mc2 = REGEX.exec(selectedText);
我原以为捕获的组中的结果是数组,而不仅仅是第一场比赛。相反,我有这个:
mc: Array(3)
0: "maintain their brain and their mind open↵↵maintain an open mind↵↵↵↵"
1: "Our brain works to spend less energy than possible↵↵Our brain works to spend as little energy as possible↵↵↵↵"
2: "They brain is avoid to change↵↵Their brain avoids change"
length: 3
mc2: Array(3)
0: "maintain their brain and their mind open↵↵maintain an open mind↵↵↵↵"
1: "maintain their brain and their mind open"
2: "maintain an open mind"
groups:
corrected: "maintain an open mind"
incorrect: "maintain their brain and their mind open"
index: 0
input: "maintain their brain and their mind open↵↵maintain an open mind↵↵↵↵Our brain works to spend less energy than possible↵↵Our brain works to spend as little energy as possible↵↵↵↵They brain is avoid to change↵↵Their brain avoids change"
length: 3
因此,对于 .exec()
,您似乎需要将相同的正则表达式对象迭代应用于相同的字符串,直到 returns null
,如下所示:
const text = "maintain their brain and their mind open\n\nmaintain an open mind\n\n\n\nOur brain works to spend less energy than possible\n\nOur brain works to spend as little energy as possible\n\n\n\nThey brain is avoid to change\n\nTheir brain avoids change";
var REGEX = new RegExp(/^\s*(?<incorrect>.*\S*.*)\n*(?<corrected>.*\S*.*)[\r|\n]*/, "gm");
let mc;
let mcAll = [];
while ((mc = REGEX.exec(text)) !== null) {
mcAll.push(mc);
}
console.log(mcAll);
示例输出:
[ [ 'maintain their brain and their mind open\n\nmaintain an open mind\n\n\n\n',
'maintain their brain and their mind open',
'maintain an open mind',
index: 0,
input: 'maintain their brain and their mind open\n\nmaintain an open mind\n\n\n\nOur brain works to spend less energy than possible\n\nOur brain works to spend as little energy as possible\n\n\n\nThey brain is avoid to change\n\nTheir brain avoids change',
groups: [Object: null prototype] {
incorrect: 'maintain their brain and their mind open',
corrected: 'maintain an open mind' } ],
[ 'Our brain works to spend less energy than possible\n\nOur brain works to spend as little energy as possible\n\n\n\n',
'Our brain works to spend less energy than possible',
'Our brain works to spend as little energy as possible',
index: 67,
input: 'maintain their brain and their mind open\n\nmaintain an open mind\n\n\n\nOur brain works to spend less energy than possible\n\nOur brain works to spend as little energy as possible\n\n\n\nThey brain is avoid to change\n\nTheir brain avoids change',
groups: [Object: null prototype] {
incorrect: 'Our brain works to spend less energy than possible',
corrected: 'Our brain works to spend as little energy as possible' } ],
[ 'They brain is avoid to change\n\nTheir brain avoids change',
'They brain is avoid to change',
'Their brain avoids change',
index: 176,
input: 'maintain their brain and their mind open\n\nmaintain an open mind\n\n\n\nOur brain works to spend less energy than possible\n\nOur brain works to spend as little energy as possible\n\n\n\nThey brain is avoid to change\n\nTheir brain avoids change',
groups: [Object: null prototype] {
incorrect: 'They brain is avoid to change',
corrected: 'Their brain avoids change' } ] ]
我正在尝试使用命名组对正则表达式的结果进行分组。命名组只得到第一个结果,尽管设置了全局标志,并且进行字符串匹配可以获得所有匹配,但不对它们进行分组。
我已经设置了 g 和 m 标志。
var REGEX = new RegExp(/^\s*(?<incorrect>.*\S*.*)\n*(?<corrected>.*\S*.*)[\r|\n]*/, "gm");
var mc = selectedText.match(REGEX);
var mc2 = REGEX.exec(selectedText);
我原以为捕获的组中的结果是数组,而不仅仅是第一场比赛。相反,我有这个:
mc: Array(3)
0: "maintain their brain and their mind open↵↵maintain an open mind↵↵↵↵"
1: "Our brain works to spend less energy than possible↵↵Our brain works to spend as little energy as possible↵↵↵↵"
2: "They brain is avoid to change↵↵Their brain avoids change"
length: 3
mc2: Array(3)
0: "maintain their brain and their mind open↵↵maintain an open mind↵↵↵↵"
1: "maintain their brain and their mind open"
2: "maintain an open mind"
groups:
corrected: "maintain an open mind"
incorrect: "maintain their brain and their mind open"
index: 0
input: "maintain their brain and their mind open↵↵maintain an open mind↵↵↵↵Our brain works to spend less energy than possible↵↵Our brain works to spend as little energy as possible↵↵↵↵They brain is avoid to change↵↵Their brain avoids change"
length: 3
因此,对于 .exec()
,您似乎需要将相同的正则表达式对象迭代应用于相同的字符串,直到 returns null
,如下所示:
const text = "maintain their brain and their mind open\n\nmaintain an open mind\n\n\n\nOur brain works to spend less energy than possible\n\nOur brain works to spend as little energy as possible\n\n\n\nThey brain is avoid to change\n\nTheir brain avoids change";
var REGEX = new RegExp(/^\s*(?<incorrect>.*\S*.*)\n*(?<corrected>.*\S*.*)[\r|\n]*/, "gm");
let mc;
let mcAll = [];
while ((mc = REGEX.exec(text)) !== null) {
mcAll.push(mc);
}
console.log(mcAll);
示例输出:
[ [ 'maintain their brain and their mind open\n\nmaintain an open mind\n\n\n\n',
'maintain their brain and their mind open',
'maintain an open mind',
index: 0,
input: 'maintain their brain and their mind open\n\nmaintain an open mind\n\n\n\nOur brain works to spend less energy than possible\n\nOur brain works to spend as little energy as possible\n\n\n\nThey brain is avoid to change\n\nTheir brain avoids change',
groups: [Object: null prototype] {
incorrect: 'maintain their brain and their mind open',
corrected: 'maintain an open mind' } ],
[ 'Our brain works to spend less energy than possible\n\nOur brain works to spend as little energy as possible\n\n\n\n',
'Our brain works to spend less energy than possible',
'Our brain works to spend as little energy as possible',
index: 67,
input: 'maintain their brain and their mind open\n\nmaintain an open mind\n\n\n\nOur brain works to spend less energy than possible\n\nOur brain works to spend as little energy as possible\n\n\n\nThey brain is avoid to change\n\nTheir brain avoids change',
groups: [Object: null prototype] {
incorrect: 'Our brain works to spend less energy than possible',
corrected: 'Our brain works to spend as little energy as possible' } ],
[ 'They brain is avoid to change\n\nTheir brain avoids change',
'They brain is avoid to change',
'Their brain avoids change',
index: 176,
input: 'maintain their brain and their mind open\n\nmaintain an open mind\n\n\n\nOur brain works to spend less energy than possible\n\nOur brain works to spend as little energy as possible\n\n\n\nThey brain is avoid to change\n\nTheir brain avoids change',
groups: [Object: null prototype] {
incorrect: 'They brain is avoid to change',
corrected: 'Their brain avoids change' } ] ]