2011-06-13 47 views
1

我有一個JSON數組,我目前通過翻轉一個布爾標誌通過搜索:正則表達式通配符陣列搜索

for (var c=0; c<json.archives.length; c++) { 
if ((json.archives[c].archive_num.toLowerCase().indexOf(query)>-1)){ 
inSearch = true; 
} } 

而且我一直在試圖通過使用特殊字符,以創建一個通配符正則表達式搜索「*」但我無法用通配符遍歷數組。

所以我試圖完成的是當查詢='199 *',用/ [\ w] /替換'*'並且基本上搜索1990,1991,1992,1993,1994 + ... + 199a,199b等

我所有的嘗試都是文字,最後我搜索'199/[\ w] /'。

有關如何創建正則表達式通配符來搜索數組的任何想法?

謝謝!

+0

可以顯示出代碼中你這樣做替換?你還在改變什麼?我假設archive_num是完整的字符串。 – Cfreak 2011-06-13 16:28:39

+0

嘗試將所有文​​字變成這樣:\t query = query.replace('*',/ [\ w] /); – SortingHat 2011-06-13 16:30:27

+0

在JS中,您不應使用引號'*',而使用/ \ * /作爲搜索字符串,並且應該引用替換字符串 – venimus 2011-06-13 16:44:17

回答

6

你應該寫這樣的事:

var query = '199*'; 
var queryPattern = query.replace(/\*/g, '\\w'); 
var queryRegex = new RegExp(queryPattern, 'i'); 

接下來,檢查每個字:

if(json.archives[c].archive_num.match(queryRegex)) 

注:

  • 考慮使用?代替**中通常代表對於許多信件,而不是一個。
  • 請注意,我們必須轉義反斜槓,以便它將創建一個有效的字符串文字。字符串'\w'與字符串w相同 - 在這種情況下,轉義被忽略。
  • 從字符串創建RegExp對象時,不需要分隔符(/.../)。
  • [\w]\w相同。是的,小事一樁。
  • 您可以通過使用模式避免部分匹配:

    var queryPattern = '\\b' query.replace(/\*/g, '\\w') + '\\b'; 
    

    ,或類似:

    var queryPattern = '^' query.replace(/\*/g, '\\w') + '$'; 
    
+0

完美!謝謝,這正是我想弄明白的。感謝提示,他們一定會在未來幫助我! – SortingHat 2011-06-16 16:20:10

1
var qre = query.replace(/[^\w\s]/g, "\\$&") // escape special chars so they dont mess up the regex 
       .replace("\\*", "\\w");  // replace the now escaped * with '\w' 

qre = new RegExp(qre, "i"); // create a regex object from the built string 
if(json.archives[c].archive_num.match(qre)){ 
    //... 
} 
+0

@Kobi,謝謝:) – Qtax 2011-06-14 13:55:31

相關問題