2016-08-02 26 views
1

私は次の正規表現を持っています:java-script単語の正規表現フィルタリング

正規表現は、私たちのアプリではコードの一部です。明らかに$#*などの文字を削除します。同じことを正確に行う必要がありますが、ハッシュタグを使用できるようにする必要があります。単語に#hashtagsを付けることができるためです。

"Test #words".toLowerCase().split(/\b/).filter(function(w){return w.match(/^\w+$/) }) // returns ["test", "words"] 

現行の正規表現はハッシュを削除します。残しておきます。だから私は得る:

["test", "#words"] 
+1

なぜない、あなただけの '.split(/ \ sの+ /)'? –

+0

'\ s'で分割すれば十分でしょうか? –

+0

正規表現は、私たちのアプリでコードのビットには、私はそれが単語を分割することがわかります。明らかに$#*などの文字を削除します。同じことをするのにハッシュを許可する必要があります。言葉に#hashtagsを付けることができるからです。 – MartinWebb

答えて

1

はあなたの"Test #words".toLowerCase().split(/\b/).filter(function(w){return w.match(/^\w+$/) })は以下のん:

  • 文字列全体が文字列がTest #wordsさを意味する任意のワード境界(先頭と末尾、で分割された下部ケース
  • になっていますに分割)
  • ^\w+$正規表現(文字列の先頭から1文字分の文字列)に一致する部分が配列に保持されます。

また/(?:\B#)?\w+/g#を含むこと同じマッチングアプローチを使用することができる:

console.log("Test #words".toLowerCase().match(/(?:\B#)?\w+/g))

パターンが一致:

  • (?:\B#)? - Oを([a-zA-Z0-9_]範囲からの)1以上の単語文字

コンテキストがそれほど重要でない場合に任意#任意の場所にマッチする単純/#?\w+/g正規表現を使用する - ptional #

  • \w+非ワード境界で始まります文字列の後に1 +単語の文字が続きます。

  • +0

    私は質問にいくつかの詳細を追加しました。私は正規表現がまったく同じことをしたいが、単語の前にハッシュタグを許可する/渡すことを確認したい。私が完全にはっきりしていない場合は申し訳ありません。 – MartinWebb

    +0

    コードを変更しなければ不可能です。理由は簡単です:JSの正規表現はlookbehindをサポートしていません。さて、問題は、コードをどの程度まで変更できるかです。私は上記のコードはあなたが必要としているものと全く同じであると言わなければなりません:オプションで '#'が前に付いた単語のチャンクを抽出します。 –

    +0

    私は正規表現を変更することができます。あなたが提供するアプローチはうまくいくようですか?私は正規表現の専門家ではないので、単語の先頭に#を付けて他に何を示唆しているかを知る必要があります。 – MartinWebb

    0

    #hashtagsをサポートするために、正規表現の冒頭にオプションの#を追加するだけです。

    "Test #words".toLowerCase().match(/#?\w+/g);

    +0

    私はすでに私の答えでそれを提案した。 –

    関連する問題