目前,我有以下幾點:需要一個特定的JavaScript正則表達式匹配
var sText = 'I like stackoverflow';
if ($(this).text().match(eval("/" + sText + "/ig"))) {
正如你可以看到,這整個字符串匹配。
我需要匹配不區分大小寫的文本,其中包含單獨的所有單詞。所以它會查找「I」,「like」和「stackoverflow」。它必須有3個單詞。
非常感謝幫助。
目前,我有以下幾點:需要一個特定的JavaScript正則表達式匹配
var sText = 'I like stackoverflow';
if ($(this).text().match(eval("/" + sText + "/ig"))) {
正如你可以看到,這整個字符串匹配。
我需要匹配不區分大小寫的文本,其中包含單獨的所有單詞。所以它會查找「I」,「like」和「stackoverflow」。它必須有3個單詞。
非常感謝幫助。
如果你真的需要用比賽來做到這一點,您可以使用多個正預測先行模式。例如,爲了匹配a
,b
和c
,以任何順序:
> p = /(?=.*a)(?=.*b)(?=.*c)/i
> 'abc'.match(p)
[""]
> 'cba'.match(p)
[""]
> 'ac'.match(p)
null
所有我需要的是正則表達式,但感謝 - 你的規則。修正了:eval(「/(?=.*」+ aText.join(')(?=。*')+「)/ ig」)) – HGPB
我有興趣看到這個基準測試的'sText'相當大的值,特別是與將其分割成單個正則表達式相比較。我不能被打擾!這匹配''就像Stackoverflow「'順便說一句,因爲它缺乏單詞邊界,''像'包含'我' –
爲什麼使用正則表達式時.indexOf
將完成這項工作?
var str = $(this).text().toLowerCase();
if (str.indexOf('i')>=0 && str.indexOf('like')>=0 && str.indexOf('stackoverflow')>=0) {
// ...
}
(請注意,在這種情況下,「我」的搜索被浪費了,因爲它包含在「喜歡」,但我相信你的實際代碼正在尋找更多的普通的文本。)
文本可能長500字(+/-) – HGPB
@Haraldo:更多的理由避免正則表達式。 (或者那個評論意味着另一個答案?) – Blazemonger
不,我正在看你的條件。 – HGPB
你可以只拆分然後循環 -
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);
你需要保持效率一點,如果你是比較雖然很多字。
我認爲這是你正在尋找的 - 關鍵是字的邊界。
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;
}
});
我添加了'return false',如果一個單詞不匹配,將會終止循環,從而提高性能。 –
@PaulCreasey謝謝,我也更新了JSFiddle示例。 –
感謝您的時間 - 我似乎用Piet Delport的解決方案來解決它。 – HGPB
所以,你希望它同時匹配'「我喜歡計算器」'和尤達形式,'「計算器我喜歡」'也字符串像''我不喜歡stackoverflow「'?問題不清楚 –
是和「我sTackOverflow喜歡」! – HGPB
而不是eval,你可以使用RegExp對象,它有兩個參數。首先是一個字符串(基本上是正則表達式,但沒有尾部斜線),第二個是一串標誌(在你的情況下是'ig')。但是,如果我正確地理解了你,'var sText =「(i | like | stackoverflow)」;'應該這樣做嗎?如果它是正確的,我會添加回答,如果不是,請更具體。 – zatatatata