2011-10-10 80 views
0

目前,我有以下几点:需要一个特定的JavaScript正则表达式匹配

var sText = 'I like stackoverflow'; 

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

正如你可以看到,这整个字符串匹配。

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

非常感谢帮助。

+2

所以,你希望它同时匹配'“我喜欢计算器”'和尤达形式,'“计算器我喜欢”'也字符串像''我不喜欢stackoverflow“'?问题不清楚 –

+0

是和“我sTackOverflow喜欢”! – HGPB

+0

而不是eval,你可以使用RegExp对象,它有两个参数。首先是一个字符串(基本上是正则表达式,但没有尾部斜线),第二个是一串标志(在你的情况下是'ig')。但是,如果我正确地理解了你,'var sText =“(i | like | stackoverflow)”;'应该这样做吗?如果它是正确的,我会添加回答,如果不是,请更具体。 – zatatatata

回答

1

如果你真的需要用比赛来做到这一点,您可以使用多个正预测先行模式。例如,为了匹配abc,以任何顺序:

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

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

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

> 'ac'.match(p) 
null 
+0

所有我需要的是正则表达式,但感谢 - 你的规则。修正了:eval(“/(?=.*”+ aText.join(')(?=。*')+“)/ ig”)) – HGPB

+0

我有兴趣看到这个基准测试的'sText'相当大的值,特别是与将其分割成单个正则表达式相比较。我不能被打扰!这匹配''就像Stackoverflow“'顺便说一句,因为它缺乏单词边界,''像'包含'我' –

0

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

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

(请注意,在这种情况下,“我”的搜索被浪费了,因为它包含在“喜欢”,但我相信你的实际代码正在寻找更多的普通的文本。)

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

+0

文本可能长500字(+/-) – HGPB

+0

@Haraldo:更多的理由避免正则表达式。 (或者那个评论意味着另一个答案?) – Blazemonger

+0

不,我正在看你的条件。 – HGPB

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

你需要保持效率一点,如果你是比较虽然很多字。

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.

+0

我添加了'return false',如果一个单词不匹配,将会终止循环,从而提高性能。 –

+0

@PaulCreasey谢谢,我也更新了JSFiddle示例。 –

+0

感谢您的时间 - 我似乎用Piet Delport的解决方案来解决它。 – HGPB

相关问题