2011-10-10 77 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

相關問題