1

Stackoverflowと同様の検索入力を実装しようとしています(node.js/javascript内)。

  • 角かっこで区切られたタグを解析します
  • スペースで区切られたキーワードを解析します

ただし、正規表現はまったくわかりません。regexsが行く方法であるかどうかさえ私は知りません。

例えば:

search field [search][search-query] [search-string]
// keywords: ['search', 'field']
// tags: ['search', 'search-query', 'search-string']

regex search tags残念ながら、 HTMLの質問が返されるため、これに関するヘルプを検索することはさらに困難です。

4

2 に答える 2

1

次のようなものが必要になると思います。

/(?:\[([^\]]*)\]|([^\s]+))/g

これを繰り返し適用して(たとえば、Javascript execメソッドを使用して)、最初と2番目のキャプチャグループから値を抽出して、それぞれタグとキーワードをキャプチャできます。

ここで試してみてください:

http://refiddle.com/85o

説明する:

最も外側の()括弧は、タグ(角括弧[]で囲まれている)またはキーワード(角括弧で囲まれていない)のいずれかに一致する選択肢を囲みます。?:ビットは、一致した式がタグであるかキーワードであるかを具体的に知る必要があり、それぞれに個別のキャプチャグループが必要なため、この選択ビットをキャプチャグループから除外します。

次のビット[([^]] *)]はタグと一致します。開き角かっこと閉じ角かっこは、リテラルにするために円記号でエスケープする必要があります。角括弧内のビットは、最初のキャプチャグループ内のテキストをキャプチャするために通常の括弧()で囲まれています。[^ ...]ビットは、カレットの後にリストされているもの以外のすべてに一致します。したがって、この場合、閉じ角括弧以外のすべてに一致します。これは*を使用して貪欲に繰り返されます。

| 選択肢を区切ると、キーワードに一致する式が得られます:([^ \ s] +)。繰り返しますが、これは括弧内にあり、結果をキャプチャグループに表示します。今回は、空白以外のものを1回以上一致させます。

最後に、/ gはグローバル修飾子であるため、すべてのオカレンスが一致します。

于 2012-09-29T21:51:55.123 に答える
0

次のコードは、文字列から配列としてタグを取得します。

var tags= "search field [search][search-query] [search-string]".match(/\[(.*?)\]/g);
// tags= ["search", "search-query", "search-string"]
于 2012-09-29T21:53:13.413 に答える