关于jquery:需要一个特定的Javascript匹配正则表达式

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个单词。

非常感谢你的帮助。


如果您真的需要对匹配进行此操作,那么可以使用多个正向前瞻模式。例如,要按任意顺序匹配abc

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);

不过,如果你在比较很多词的话,你需要记住效率。


.indexOf完成任务时,为什么要使用正则表达式?

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:不区分大小写的搜索