當前我正在使用下面的搜索。 我假設用戶類型中的每個術語都必須至少在文章中出現一次。 我使用匹配法正則表達式在javascript中使用正則表達式的基本搜索排名
^(?=.*one)(?=.*two)(?=.*three).*$
與g
,i
,並m
在我使用matches.length計算匹配的數量的時刻,但並不如預期的行爲。 例如: 「one two three. one two three
」 會給我2場比賽,但它確實應該6.
如果我這樣做
(one|two|three)
然後我得到6場比賽,但如果我有數據:
"one two. one two"
我得到4個匹配,實際上我希望它是0,因爲並不是每個詞至少出現一次。 我可以做第一個正則表達式來檢查是否至少有一個「匹配」。如果有的話,我會隨後使用第二個正則表達式來計算匹配的實際數量,但這會使我的程序比現有的運行速度慢得多。對2500個json文章執行這個正則表達式需要60到120秒的時間。
關於如何使這個更快或更好的任何想法?改變正則表達式?使用搜索或indexOf而不是匹配?
注: 我使用lawnchair DB本地持久性和jQuery。我將手機代碼和Chrome打包應用程序打包在一起。
您正在搜索包含「one」和「two」以及「three」的字符串,只有兩個(不是六個)字符串包含一個,兩個和三個......爲什麼這應該是錯誤? – Gabber
你可以做兩個步驟。首先使用'^(?=。* one)(?=。* two)(?=。* three)'來查看字符串是否匹配,然後使用替代形式來獲得計數。以爲我不得不說,使用通配符'(。*)'會導致糟糕的正則表現,所以如果你有很長的字符串,你會想要避免這種情況。 '.indexOf'可能是一個更好的選擇。 *編輯:*我只是注意到,你實際上已經知道你自己:) –
@FelixKling是正確的(因此這是作爲一個評論,而不是一個答案張貼),以完成你正在尋找的正則表達式,但你可以做一些事情(^ =。* two)(?=。* three)(\ W *(one | two | three))+' – Gabber