JavaScript 中 test() 和 exec() 方法的区别
RegExp.prototype.test() 和 RegExp.prototype.exec() 方法是 JavaScript 中用于处理正则表达式的两种方法。除了这两种方法之外,JavaScript 还包含许多内置方法,用于使用正则表达式操作和处理文本。
什么是正则表达式?
正则表达式是用于在字符串中搜索字符组合的模式。在 JavaScript 中,正则表达式被视为对象,用 "regex" 或 "RegExp" 表示。
exec() 方法
exec() 方法在给定字符串中搜索指定字符串的匹配项。如果在给定字符串中存在匹配项,则返回一个数组;如果在给定字符串中未找到匹配项,则返回 null 值。换句话说,exec() 方法将字符串作为参数。此字符串将被检查是否与给定字符串匹配。
语法
这是 JavaScript 中正则表达式的 exec() 方法的语法:
regularExpressionObj.exec(string)
示例
以下是 JavaScript 中 exec() 方法的一个示例。这里我们在给定字符串中搜索特定单词。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>exec() - Regular Expression in JavaScript</title> </head> <body> <p>click to get exec() method output</p> <button onclick="findMatch()">Search</button> <p id="tutorial"></p> <script> function findMatch() { var txt ="Learning regular expressions in JavaScript"; var search1 = new RegExp("JavaScript"); var search2 = new RegExp("Abdul") var res1 = search1.exec(txt); var res2 = search2.exec(txt); document.getElementById("tutorial").innerHTML ="Given string is:"+txt +"<br>"+ "Specific word to match are:"+search1+" "+search2+"<br>"+"Result of two search keys: "+res1+" "+res2 } </script> </body> </html>
test() 方法
test() 方法在给定字符串中搜索指定字符串的匹配项。exec() 和 test() 方法之间的区别在于,如果在给定字符串中存在匹配项,则 exec() 方法将返回指定的匹配项,如果不存在则返回 null,而 test() 方法返回布尔结果,即如果存在指定的匹配项则返回 true,否则返回 false。
语法
这是 JavaScript 中 test() 方法的语法:
regularExpressionObj.test(string)
它也以给定的输入字符串作为参数,并返回布尔结果。
示例
此程序也在字符串中搜索给定单词,但这里我们使用的是 test() 方法。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>test() - Regular Expression in JavaScript</title> </head> <body> <p>click to get exec() method output</p> <button onclick="findMatch()">Search</button> <p id="tutorial"></p> <script> function findMatch() { var txt ="Learning regular expressions in JavaScript"; var search1 = new RegExp("JavaScript"); var search2 = new RegExp("Abdul") var res1 = search1.test(txt); var res2 = search2.test(txt); document.getElementById("tutorial").innerHTML ="Given string is:"+txt+"<br>"+ "Specific word to match are:"+search1+" "+search2+"<br>"+"Result of two search keys: "+res1+" "+res2 } </script> </body> </html>
search() 和 test() 的区别
test() 方法验证匹配项并返回布尔值,而 exec() 方法捕获组并将正则表达式与输入匹配。如果您只需要测试输入字符串是否与正则表达式匹配,则 RegExp.test() 最合适。它将提供一个布尔值,使其非常适合条件语句。
RegExp.exec() 方法提供类似数组的返回值,其中包含所有捕获组和匹配索引。因此,当您需要在匹配后处理捕获组或索引时,它非常有用。
示例
在下面的示例中,我们使用这两种方法执行相同的正则表达式。在这里您可以观察到 test() 方法返回布尔值,而 exec() 方法返回数组。
<!DOCTYPE html> <html> <body> <script> var regex = RegExp("^([a-z]+) ([A-Z]+)$"); document.write("Result of the exec method: "+regex.exec("hello WORLD")) document.write("<br> Result of the test method: "+regex.test("hello WORLD")) </script> </body> </html>
输出
执行上述程序后,您将获得以下输出。
Result of the exec method: hello WORLD,hello,WORLD Result of the test method: true
请注意,exec 返回的数组中的第一个索引是完整的匹配字符串。后面的索引是正则表达式捕获的各个组。