Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.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
Php preg_匹配所有JS等效物?_Php_Javascript_Regex_Phpjs - Fatal编程技术网

Php preg_匹配所有JS等效物?

Php preg_匹配所有JS等效物?,php,javascript,regex,phpjs,Php,Javascript,Regex,Phpjs,Javascript中是否有PHP的preg_match_all的等价物?如果不是,将正则表达式的所有匹配项放入数组的最佳方法是什么?我愿意使用任何JS库来简化它。您可以使用带有全局修饰符的match: >>> '1 2 3 4'.match(/\d/g); ["1", "2", "3", "4"] 约翰·雷斯格在他的博客上写了一个很棒的技巧,叫做 它使用javascript的replace函数工作,该函数接受回调函数,不返回任何内容以保持原始内容不变 这可能比使用全局匹配和

Javascript中是否有PHP的preg_match_all的等价物?如果不是,将正则表达式的所有匹配项放入数组的最佳方法是什么?我愿意使用任何JS库来简化它。

您可以使用带有全局修饰符的
match

>>> '1 2 3 4'.match(/\d/g);
["1", "2", "3", "4"]

约翰·雷斯格在他的博客上写了一个很棒的技巧,叫做

它使用javascript的replace函数工作,该函数接受回调函数,不返回任何内容以保持原始内容不变


这可能比使用全局匹配和迭代结果数组更简洁,尤其是在捕获多个组的情况下。

与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
使用
newregexp().test()
函数preg\u match\u all(regex,str){
返回新的RegExp(regex,'g').test(str)

}
我不懂这个语法。@erm3nda我想/\d/g是你不懂。注意,这种方法忽略捕获<代码>'1a2b3c4d'。匹配(/(\d)([a-z])/g)只输出
[“1a”、“2b”、“3c”、“4d”]
。如果需要,请参阅