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

时间:2018-11-02 14:02:42

标签: javascript jquery regex custom-data-attribute

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

var string= "a,b,c";

然后用正则表达式接受任何字符串单词作为接受的匹配项吗?

regExApproved = new RegExp(string, 'ig');

以便我们可以搜索元素的数据属性,并显示该元素是否具有属性中任何可接受的匹配项

$(this).attr("data-payment").match(regExApproved)

我面临的问题是regex接受整个字符串并使其成为唯一的匹配大小写。
我需要使用正则表达式将字符串分解并接受其中的任何单词作为匹配项

这可能吗? 我不想使用forloop并为字符串中的每个单词设置不同的正则表达式匹配项,但是也许我必须这样做?

2 个答案:

答案 0 :(得分:1)

我建议使用

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(function(x) return x.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); }))-escapes备选方案
  • .join('|')创建最终的交替模式。

修改

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

var string= ['visa','mastercard'];
var regExApproved = new RegExp(string.join('|'), 'i');
// If the items must be matched as whole words:
// var regExApproved = new RegExp('\\b(?:' + string.join('|') + ')\\b', 'i');
// If the array items contain special chars:
// var regExApproved = new RegExp(string.map(x => x.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')).join('|'), 'i');
console.log(regExApproved.test("There is MasterCard here"));

答案 1 :(得分:1)

如果您的Array是用逗号分隔的单词列表,则可以按逗号将其分开,然后使用word方法的组合来检查测试中是否有任何string.split(",").map(s => new RegExp('\\b' + s + '\\b')).some(r => $(this).attr("data-payment").match(r)) 是否匹配字符串。

这应该是您的代码:

string.split(",")

我们在哪里:

  • string以逗号分隔.map(s => new RegExp('\\b' + s + '\\b'))
  • regex使用单词边界为string中的每个单词返回相关的.some(r => $(this).attr("data-payment").match(r))
  • string检查我们的var string = "is,dog,car"; let str = "this is just a test"; if (string.split(",").map(s => new RegExp('\\b' + s + '\\b')).some(r => str.match(r))) { console.log("Matched"); }是否与创建的任何正则表达式匹配。

演示:

{{1}}