Need a specific Javascript match regex
我目前有以下几点:
1 2 3 | var sText = 'I like stackoverflow'; if ( $(this).text().match( eval("/" + sText +"/ig") ) ) { |
如您所见,这与整个字符串匹配。
我需要匹配包含所有单词的不区分大小写的文本。因此,它将查找"i"、"like"和"stackoverflow"。它必须包含所有3个单词。
非常感谢你的帮助。
如果您真的需要对匹配进行此操作,那么可以使用多个正向前瞻模式。例如,要按任意顺序匹配
1 2 3 4 5 6 7 8 9 10 | > p = /(?=.*a)(?=.*b)(?=.*c)/i > 'abc'.match(p) [""] > 'cba'.match(p) [""] > 'ac'.match(p) null |
我想这就是你要找的-关键是单词边界。
1 2 3 4 5 6 7 8 9 10 11 | var text ="text to match" var stringToLookFor ="I like stackoverflow"; var words = stringToLookFor.split(""); var match=true; $.each(words, function(index, word) { if(!text.match(eval("/\\b" + word +"\\b/i"))) { match=false; return false; } }); |
jfiddle示例。
你可以先拆分然后循环-
1 2 3 4 5 6 7 8 9 10 | var sText = 'I like stackoverflow'; var cText = 'stackoverflow like I'; var arr = sText.split(' '); var match = true; for (i=0;i<arr.length;i++) { if (!cText.match(eval("/" + arr[i] +"/ig"))) match= false; } alert(match); |
不过,如果你在比较很多词的话,你需要记住效率。
当
1 2 3 4 | var str = $(this).text().toLowerCase(); if (str.indexOf('i')>=0 && str.indexOf('like')>=0 && str.indexOf('stackoverflow')>=0) { // ... } |
(请注意,在这种情况下,"i"搜索是浪费的,因为它包含在"like"中,但我假设您的实际代码是在搜索更普通的文本。)
可能的相关问题:javascript:不区分大小写的搜索