JavaScript String matchAll() 方法



JavaScript String matchAll() 方法检索与当前字符串中的指定正则表达式 (regex) 匹配的所有结果的迭代器。但是,如果指定的正则表达式在当前字符串中找不到任何匹配项,它将返回一个空迭代器。

如果正则表达式不包含 “g” 标志或未设置全局 (g) 标志,它将引发 “TypeError” 异常。

语法

以下是 JavaScript String matchAll() 方法的语法 -


 matchAll(regexp)

参数

此方法接受一个名为 'regexp' 的参数,如下所述 -

  • regexp − 它是一个正则表达式对象。

返回值

此方法返回当前字符串中匹配项的迭代器,如果未找到匹配项,则返回空迭代器。

示例 1

如果指定的正则表达式与此字符串匹配,它将返回一个迭代器,其中包含此字符串中匹配的所有结果。

在下面的程序中,我们使用 JavaScript String matchAll() 方法检索与指定正则表达式 /Tuto/g 匹配此字符串 “QikepuComTuto” 的所有结果的迭代器。


<html>
<head>
<title>JavaScript String matchAll() Method</title>
</head>
<body>
<script>
			const str = "QikepuComTuto";
			document.write("String: ", str);
			const regex =/Tuto/g;
			document.write("<br>Regular expression: ", regex);
			//using the matchAll() function
			const iterator_array = [...str.matchAll(regex)];
			try {
						document.write("<br>An iterator: ", iterator_array);
			} catch (error) {
						document.write("<br>", error);
			}	
</script>
</body>
</html>

输出

上面的程序返回一个迭代器,作为 −

String: QikepuComTuto
Regular expression: /Tuto/g
An iterator: Tuto

示例 2

如果指定的正则表达式与此字符串不匹配,它将返回一个空迭代器。

以下是 JavaScript String matchAll() 方法的另一个示例。我们使用此方法针对指定的正则表达式 /java/[A-Z]*/g 检索此字符串 “JavaScript” 中所有结果匹配项的迭代器。


<html>
<head>
<title>JavaScript String matchAll() Method</title>
</head>
<body>
<script>
	 	const str = "JavaScript";
	 	document.write("String: ", str);
	 	const regex = /java[A-Z]*/g;
	 	document.write("<br>Regular expression: ", regex);
	 	//using the matchAll() function
	 	const iterator_array = [...str.matchAll(regex)];
	 	try {
	 	 	 document.write("<br>An iterator: ", iterator_array);
	 	} catch (error) {
	 	 	 document.write("<br>", error);
	 	}
</script>
</body>
</html>

输出

执行上述程序后,它将返回一个空的迭代器作为 -

String: JavaScript
Regular expression: /java[A-Z]*/g
An iterator:

示例 3

如果正则表达式 (regexp) 没有设置全局 (g) 标志或不包含 “g”,它将引发 'TypeError' 异常。

在以下示例中,我们使用 JavaScript String matchAll() 方法检索与指定正则表达式 /Lan[a-z]*/ 匹配此字符串 “Hyper Text Markup Language” 的所有结果的迭代器。由于正则表达式不包含 global(“g”),因此会抛出 “TypeError” 异常。


<html>
<head>
<title>JavaScript String matchAll() Method</title>
</head>
<body>
<script>
	 	const str = "Hyper Text Markup Language";
	 	document.write("String: ", str);
	 	const regex = /Lan[a-z]*/;
	 	document.write("<br>Regular expression: ", regex);
	 	//using the matchAll() function
	 	try {
	 	 	 document.write("An iterators: ", str.matchAll(regex));
	 	} catch (error) {
	 	 	 document.write("<br>", error);
	 	}
</script>
</body>
</html>

输出

上述程序引发 'TypeError' 异常。

String: Hyper Text Markup Language
Regular expression: /Lan[a-z]*/
TypeError: String.prototype.matchAll called with a non-global RegExp argument