[英]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, '\\\\$&'); })
) - 逃避替代方案 .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'))
使用字邊界返回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"); }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.