Javascript中是否有相当于PHP的preg_match_all?如果不是,将正则表达式的所有匹配项放入数组中的最佳方法是什么?我愿意使用任何 JS 库来简化它。
问问题
27820 次
5 回答
32
您可以使用match
全局修饰符:
>>> '1 2 3 4'.match(/\d/g);
["1", "2", "3", "4"]
于 2009-06-11T21:26:39.400 回答
10
John Resig 在他的博客上写了一个很棒的技术,叫做“搜索而不替换”
它使用 javascript 的 replace 函数工作,该函数接受一个回调函数,并且不返回任何内容以保持原始内容不变。
这比使用全局匹配和迭代一系列结果更简洁,尤其是在捕获多个组时。
于 2009-06-11T21:30:48.580 回答
2
JS 中 PHP 的 preg_match_all 更好的等价物是使用 exec() 函数。这也将允许您捕获组,使用 match() 您不能这样做。
例如,您想从变量 myString 中捕获所有时间和括号中的数字:
var myString = "10:30 am (15 left)11:00 am (15 left)11:30 am";
var pattern = /(\d{1,2}:\d{1,2}\s?[ap]m)\s\((\d+)/gi;
var match;
while (match = pattern.exec(myString)){
console.log('Match: "' + match[0] + '" first group: -> "' + match[1] + '" second group -> ' + match[2]);
}
输出将是:
Match: "10:30 am (15" first group: -> "10:30 am" second group -> 15
Match: "11:00 am (15" first group: -> "11:00 am" second group -> 15
于 2016-05-27T10:36:51.687 回答
0
采用new RegExp().test()
function preg_match_all(regex, str) {
return new RegExp(regex,'g').test(str)
}
于 2020-06-07T22:21:36.797 回答
0
如果您需要 php.ini 中的确切返回结构。使用前请自行检查)
解决方案(在打字稿上):
function preg_match_all(regex: RegExp, str: string) {
return [...str.matchAll(new RegExp(regex, 'g'))].reduce((acc, group) => {
group.filter((element) => typeof element === 'string').forEach((element, i) => {
if (!acc[i]) acc[i] = [];
acc[i].push(element);
});
return acc;
}, [] as string[][]);
}
示例(在 javascript 上):
const str = ';9N;N1;CP-S2;EU;CP-S3;E;CP-S4;KRT;VH;;VL;CP-S2;CP-S3;CP-S4';
const regex = /CP-(S[\d*])/;
const result = preg_match_all(regex, str);
console.log(result);
function preg_match_all(regex, str) {
return [...str.matchAll(new RegExp(regex, 'g'))].reduce((acc, group) => {
group.filter((element) => typeof element === 'string').forEach((element, i) => {
if (!acc[i]) acc[i] = [];
acc[i].push(element);
});
return acc;
}, []);
}
于 2021-12-17T05:05:47.647 回答