如果匹配字符串,我想检查数组中的每个值,
但是当我使用console.log(/^reg_arr[i]/.test(str1));
时它不起作用
但是当我使用console.log(/^table/.test(str1));
时,它可以正常工作
var str1 = 'table football';
var reg_arr = ["table","football"];
for(var i = 0, reg_arr_length = reg_arr.length; i < reg_arr_length; i++)
{
console.log(/^reg_arr[i]/.test(str1)); /* doesnt work */
}
console.log(/^table/.test(str1)); /* this works */
我的语法是否有问题,
谢谢,
答案 0 :(得分:1)
使用new RegExp(source: string[, flags: string])
(简称RegExp(source: string[, flags: string])
也正常)
var str1 = 'table football';
var reg_arr = ["table","football"];
for(var i = 0, reg_arr_length = reg_arr.length; i < reg_arr_length; i++)
{
console.log(new RegExp(`^${reg_arr[i]}`).test(str1));
}
答案 1 :(得分:0)
使用斜杠定义正则表达式并不允许您在正则表达式中输入变量,也就是说,在以下示例中,str1
被选中包含"test"
,而不是变量测试的值。
var str1 = "hello";
var str2 = "Hello world";
console.log(/str1/i.test(str2))
要解决此问题,您需要为数组中的每个值创建一个新的正则表达式,这可以使用new RegExp(str)
而不是斜杠来完成。
var str1 = "hello";
var str2 = "hello world";
console.log(new RegExp(str1, "i").test(str2))
但是,此方法有一个catch,该字符串中的字符不会被转义。因此new RegExp("test.hello")
将匹配"test hello"
,因为该点被解释为正则表达式通配符而不是句点。要解决这个问题,我们首先必须手动转义搜索字符串中的任何特殊字符(除非事件reg_arr
实际上是正则表达式)。我从this MDN page.
var str1 = "hello"
var str2 = "hello world"
str1.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
console.log(new RegExp(str, "i").test(str2))
因此,在不更改任何其他内容的情况下,您的最终console.log
可能如下所示:
console.log(new RegExp(reg_arr[i].replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).test(str1));