淘先锋技术网

首页 1 2 3 4 5 6 7

javascript中的exec()方法,可用于在字符串中查找匹配正则表达式的值。该方法可返回第一个匹配项的信息,以数组形式进行返回,包含匹配的值,匹配到的位置及原始字符串。exec()方法是使用RegExp对象调用的,不能直接使用字符串调用。

const re = /quick\s(brown).+?(jumps)/ig;
const str = 'The Quick Brown Fox Jumps Over The Lazy Dog';
const matches = re.exec(str);
console.log(matches[0]); //"Quick Brown Fox Jumps"
console.log(matches[1]); //"Brown"
console.log(matches[2]); //"Jumps"
console.log(matches.index); //4
console.log(matches.input); //"The Quick Brown Fox Jumps Over The Lazy Dog"

在正则表达式的全局标志(g)开启时,每次执行exec()方法将从上一次匹配后的位置继续向下进行匹配。通过while循环,能够找到所有匹配项。如果没有找到匹配项,将返回null。

const re = /quick\s(brown).+?(jumps)/ig;
const str = 'The Quick Brown Fox Jumps Over The Lazy Dog';
let matches;
while(matches = re.exec(str)){
console.log(matches[0]);
console.log(matches[1]);
console.log(matches[2]);
}
/*
Quick Brown Fox Jumps
Brown
Jumps
*/

在上面的例子中,通过while循环,可以输出所有匹配项的信息。同时,注意到matches不应该在循环条件中声明,直接赋值即可。声明matches变量的目的是,将匹配项保存在变量中,方便后续的操作。

此外,exec()还有其他应用场景。当正则表达式中指定捕获组时,exec()方法会将捕获的组作为数组项返回,第一项为全匹配项,后续项为各个捕获组的信息。在这种情况下,返回的数组对象还会有一个groups属性,在捕获组较多时,这个属性能够更好地帮助用户辨识捕获组的信息。

const pattern = /(\d{4})-(\d{2})-(\d{2})/;
const dateString = '2019-11-05';
const match = pattern.exec(dateString);
console.log(match[0]); //"2019-11-05"
console.log(match[1]); //"2019"
console.log(match[2]); //"11"
console.log(match[3]); //"05"
console.log(match.groups); //undefined

在上面的例子中,正则表达式中指定了三个捕获组,对应日期中的年、月、日。匹配成功后,返回了包含全匹配项及捕获组的数组信息。但在这个例子中,没有使用JavaScript对捕获组的支持。当与JavaScript的RegExp相结合时,可获得更完整的捕获组信息。

const pattern = /(?<year>\d{4})-(?<month>\d{2})-(?<date>\d{2})/;
const dateString = '2019-11-05';
const match = pattern.exec(dateString);
console.log(match[0]); //"2019-11-05"
console.log(match.groups.year); //"2019"
console.log(match.groups.month); //"11"
console.log(match.groups.date); //"05"

在上面的例子中,正则表达式中指定的捕获组均被命名为year、month、date,匹配成功后,除了返回了数组信息外,还有包含命名捕获组的信息。使用命名捕获组能够更清晰地辨识数组中的各项,也方便代码的阅读及编辑。

总而言之,JavaScript的exec()方法十分强大,基于正则表达式进行字符串匹配时,exec()方法是重要的工具之一。在熟练掌握该方法的使用之后,我们能够更好地完成各种字符串处理任务。