需要一个特定的Javascript匹配正则表达式

时间:2011-10-10 15:06:38

标签: jquery regex match

我目前有以下内容:

var sText = 'I like stackoverflow';

if ( $(this).text().match( eval("/" + sText + "/ig") ) ) {

如您所见,这与整个字符串匹配。

我需要匹配单独包含所有单词的不区分大小写的文本。所以它会寻找“我”,“喜欢”和“stackoverflow”。它必须包含所有3个单词。

非常感谢帮助。

4 个答案:

答案 0 :(得分:1)

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

> p = /(?=.*a)(?=.*b)(?=.*c)/i

> 'abc'.match(p)
[""]

> 'cba'.match(p)
[""]

> 'ac'.match(p)
null

答案 1 :(得分:0)

为什么在.indexOf完成工作时使用正则表达式?

var str = $(this).text().toLowerCase();
if (str.indexOf('i')>=0 && str.indexOf('like')>=0 && str.indexOf('stackoverflow')>=0) {  
    // ...
}

(请注意,在这种情况下,“i”搜索被浪费,因为它包含在“like”中,但我假设您的实际代码正在搜索更多普通文本。)

可能的相关问题:JavaScript: case-insensitive search

答案 2 :(得分:0)

你可以拆分然后循环 -

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

如果你要比较很多单词,你需要记住效率。

答案 3 :(得分:0)

我认为这就是你要找的 - 关键是边界这个词。

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

JSFiddle example.