正则表达式将所有动态字符串单词匹配到数据属性
Regex Match ALL Dynamic string words to data attribute
是否可以动态生成字符串
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(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"));
如果你的 string
是逗号分隔的单词列表,你可以用逗号分隔它,然后使用 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'))
到 return string
中每个单词的相关 regex
使用单词边界。
.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");
}
是否可以动态生成字符串
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(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"));
如果你的 string
是逗号分隔的单词列表,你可以用逗号分隔它,然后使用 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'))
到 returnstring
中每个单词的相关regex
使用单词边界。.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");
}