2012-08-06 41 views
1

說到更高級或冗長的正則表達式老實說,我有點失落。我有一個查詢字符串,我需要匹配並獲取值和查詢參數的名稱。對我來說,困難在於值可能是不同的值,目前只有4種不同的查詢參數。下面是一個例子查詢字符串:不同值的JavaScript /正則表達式參數

foo title:"Foo Bar" -title:other author: (mitchell* OR mike) from:2012-01-01 to: 2012-06-01 

的查詢參數是標題,作者,從而至。三個不同的值在雙引號「Foo Bar」中,用括號(mitchell *或mike)或單個值2012-01-01或其他值包圍。注意冒號後面還有一個可選空格。在每個參數名稱前面還可以有一個+或 - - 標題。標題和作者值可以具有通配符。

我目前不感興趣的解析像我不需要解析值(米切爾*還是邁克)知道里面有什麼,只是想顯示其作爲一個整體。

我怎樣才能用正則表達式解析這個字符串來獲取與它一起的參數名稱的值?

我能對付像結果:

['title:"Foo Bar"', '-title:other', 'author: (mitchell* OR mike)', 'from:2012-01-01', 'to:2012-06-01'] 

我並不需要擔心不開頭有一個PARAM名稱,如foo的(可在字符串中的任何地方)的值,只需要獲取參數名稱和值。

+0

我可以做任何我需要做的事來完成我所需要的。如果這意味着先解析某些東西然後再做一些很好的事情。 從來沒有說過它是一個請求字符串,我使用的術語可能會讓你覺得它是像參數,但它是一個字符串被饋入到搜索服務器,但我想解析這個用於UI的「查詢字符串」。 – 2012-08-06 16:31:50

回答

1

約瑟夫是對的。你給的數據是非常雜亂,使其在一個正則表達式是太複雜了,國際海事組織,我能想到的最好的辦法是將3個不同的表情,一個是你要搜索的每種類型:

該搜索開始左支架項目:

-?\w+:\s*\((.*?)\) 

該搜索開始用雙引號項目:

-?\w+:\s*"(.*?)" 

此搜索其他項目(包含空格的項目將無法正常工作):

-?\w+:\s*([^\s"\(]+) 

也許,有一個更簡單的方法來做到這一點,但這是我會這樣做的方式。

+0

我有完全的控制權,並不介意以多種方式進行操作,如果這是唯一的方法。 我真的不能說這是混亂的,它是靈活的,但就像俗話說的好,你說番茄,我說番茄(失去語境只是打字) – 2012-08-06 16:31:04

+0

這些工作,除非有在每個正則表達式的多個匹配。例如,如果我在那裏添加'-title:test',第三個應該在技術上匹配-title:other和-title:test,但它只返回第一個。一旦我們得到了這一切,那麼你已經完美地回答了! – 2012-08-06 16:50:55

+0

對於全球而言,無所謂,重新審視並增加了g,它匹配了全部。謝謝! – 2012-08-06 22:05:25

0

這正則表達式確實我是想什麼:

/-?\w+:\s*([^\s"\(]+|"(.*?)"|\((.*?)\))/g 

返回:

["title:"Foo Bar"", "-title:other", "author: (mitchell* OR mike)", "from:2012-01-01", "to: 2012-06-01"] 

因爲我想要!