Javascript 正则表达式将所有动态字符串字与数据属性匹配

Javascript 正则表达式将所有动态字符串字与数据属性匹配,javascript,jquery,regex,custom-data-attribute,Javascript,Jquery,Regex,Custom Data Attribute,是否可以有一个动态生成的字符串 var string= "a,b,c"; 然后用它做一个正则表达式,它接受任何字符串和单词作为接受的匹配 regExApproved = new RegExp(string, 'ig'); 因此,我们可以搜索元素的数据属性,并显示该属性中是否有任何可接受的匹配项 $(this).attr("data-payment").match(regExApproved) 我面临的问题是正则表达式接受整个字符串,并使其成为唯一匹配的大小写。 我需要正则表达式来分解字符串

是否可以有一个动态生成的字符串

var string= "a,b,c";
然后用它做一个正则表达式,它接受任何字符串和单词作为接受的匹配

regExApproved = new RegExp(string, 'ig');
因此,我们可以搜索元素的数据属性,并显示该属性中是否有任何可接受的匹配项

$(this).attr("data-payment").match(regExApproved)
我面临的问题是正则表达式接受整个字符串,并使其成为唯一匹配的大小写。
我需要正则表达式来分解字符串并接受其中的任何单词作为匹配项

这可能吗? 我不想使用forloop并对字符串中的每个单词进行大量不同的正则表达式匹配,但也许我必须这样做?

我建议使用

var regExApproved = new RegExp(string.split(",").map(x => x.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')).join('|'), 'i');
然后,要检查正则表达式是否与字符串匹配,使用
RegExp\test
方法更有意义:

regExApproved.test($(this).attr("data-payment"))
注:

  • .split(“,”)
    -拆分为逗号分隔的块
  • .map(x=>x.replace(/[-\/\^$*+?。()[\]{}]/g,'\\$&'))
    (或
    .map(函数(x)返回x.replace(/[-\/\^$*+?。()[\]{}]/g,'\$&'))
    )-替代方法
  • .join(“|”)
    创建最终的交替模式
编辑

您的
字符串
似乎是一个值数组。在这种情况下,使用

var字符串=['visa','mastercard'];
var regExApproved=new RegExp(string.join(“|”),“i”);
//如果项目必须作为整词匹配:
//var regExApproved=new RegExp('\\b(?:'+string.join('|')+'\\b',i');
//如果数组项包含特殊字符:
//var regExApproved=new RegExp(string.map(x=>x.replace(/[-\/\\^$*+?。()\\[\]{}]/g,'\\$&')).join('\'),'i');

console.log(regExApproved.test(“这里有万事达卡”)如果您的
字符串
是一个逗号分隔的单词列表,您可以用逗号将其拆分,然后使用
数组
方法的组合来检查测试字符串中是否有任何
单词
匹配

这是您的代码应该如何编写的:

string.split(",").map(s => new RegExp('\\b' + s + '\\b')).some(r => $(this).attr("data-payment").match(r))
我们有:

  • string.split(“,”)
    以逗号分隔
    字符串
  • .map(s=>newregexp('\\b'+s+'\\b'))
    使用单词边界为
    字符串中的每个单词返回相关的
    regex
  • .some(r=>$(this).attr(“数据支付”).match(r))
    检查我们的
    字符串是否匹配任何一个创建的正则表达式
    
演示:

var string=“is,dog,car”;
让str=“这只是一个测试”;
if(string.split(“,”).map(s=>newregexp('\\b'+s+'\\b')).some(r=>str.match(r))){
控制台日志(“匹配”);

}
我需要正则表达式来分解字符串并接受其中的任何单词作为匹配项。你想根据什么来打破这条线?你是如何定义单词的?单词是用逗号分隔的所有组,也可以是空格字符或任何其他分隔符?单词是用逗号和空格分隔的,比如单词,单词,好的,我知道了,请检查我下面的答案,我给出了一个解决方案并制作了一个示例演示。谢谢,但这是生成的正则表达式:/\b([“visa”|“mastercard”])\b/gi与我的数据值不匹配:“all,visa,mastercard,ideal,entropay”@ChrisCullen您真正的输入字符串是什么?我怀疑它是一个字符串,它看起来好像您的
字符串实际上是一个数组。只是不要使用
。split(“,”
,然后,省略此命令。尝试
新建RegExp(string.map(x=>x.replace(/[-\/\^$*+?.()\[\]{}]/g,\\$&')。join('\\'),'i')
。可能需要对代码进行其他调整,具体取决于您对正则表达式所做的操作(替换或匹配).@ChrisCullen我添加了几个解决方案。所有解决方案都基于一个动态创建的正则表达式,只需1个正则表达式测试操作即可检查字符串中是否存在任何正则表达式。@ChrisCullen为什么要将其字符串化?如果它是一个数组,为什么不将带有字符串数组的
val
传递给正则表达式构造函数?Stribizew I simp我用val代替了字符串,我想它可能真的能用!