1

正直に言うと、より高度な、または長い正規表現になると、私は少し迷っています。クエリパラメータの値と名前を照合して取得する必要があるクエリ文字列があります。私にとっての難しさは、値が異なる値になる可能性があり、現在、4つの異なるクエリパラメータしかないことです。クエリ文字列の例を次に示します。

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

クエリパラメータは、title、author、from、toです。3つの異なる値は、二重引用符で囲まれた「Foo Bar」内にあり、括弧(mitchell *またはmike)または単一の値2012-01-01などで囲まれています。コロンの後にオプションのスペースもあることに注意してください。各パラメータ名の前に+または-を付けることもできます-title。タイトルと作成者の値にはワイルドカードを使用できます。

私は現在、値の内容を知るために解析(mitchell *またはmike)する必要がなく、全体として表示したいので、値を解析することに興味がありません。

正規表現を使用してこの文字列を解析し、それに付随するパラメータ名の値を取得するにはどうすればよいですか?

私は次のような結果を扱うことができます:

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

最初にfooのようなパラメータ名がない値(文字列のどこにあってもかまいません)について心配する必要はありません。パラメータ名と値を取得するだけです。

4

2 に答える 2

1

ジョセフは正しいです。提供するデータは非常に乱雑です。1つの正規表現で作成するには複雑すぎるIMOです。これを考えるのに最適な方法は、検索するタイプごとに1つずつ、3つの異なる式を適用することです。

これは、左角かっこで始まるアイテムを検索します。

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

これは、二重引用符で始まるアイテムを検索します。

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

これは他のアイテムを検索します(スペースのあるアイテムは機能しません):

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

おそらく、もっと簡単な方法がありますが、これは私が行う方法です。

于 2012-08-06T16:07:38.863 に答える
0

この正規表現は、私が望んでいたことを実行します。

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

戻り値:

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

欲しいように!

于 2012-08-06T22:13:09.857 に答える