私は電子メールアドレスを見つけると予想されるnodeJSサーバで作業しており、正規表現を使用する必要があります。NodeJSの正規表現パターンが期待したものと一致しない
/[A-Z0-9.][email protected][A-Z0-9.-]+\.[A-Z]{2,}([A-Z]{2,})?/i
を、私はそれは、例えば、電子メールに一致するように期待している:
私は、次のパターンを使用しています。これは、ちょうど匿名化された、掻き集められたウェブサイトからの実際のスニペットです。これを行うには
<a href="mailto:[email protected]">[email protected]</a>
、私はそうのような組み込みString.match()機能を使用しています:
let expr = /[A-Z0-9.][email protected][A-Z0-9.-]+\.[A-Z]{2,}([A-Z]{2,})?/i
let str = "<a href="mailto:[email protected]">[email protected]</a>"
console.log(str.match(expr));
私は出力が一致の配列であることを期待し、代わりにnull
を取得しています。サーバでstr
はCheerioで刻んだウェブページの完全なHTMLで、toString()
に変換されています。それはin this Regexr exampleを作成しました。
ご迷惑をおかけして申し訳ございません。私は私の独創的なアプローチが機能しなかった理由はわからない
ソリューション
。最後に、RegExpオブジェクトを作成すると、そのように私のために働い:
let expression = "[A-Z0-9.][email protected][A-Z0-9.-]+\.[A-Z]{2,}([A-Z]{2,})?"
let regexp = new RegExp(expression, 'ig');
let results = bodyText.match(regexp);
しかし、私はそれが最初のオブジェクトを作成しなくても機能するように得ることができませんでした。
に見てみましょう結果。いずれにせよ、 '.'にマッチさせるには、文字クラスの外でそれをエスケープする必要があります(' + 'の後の' .'はエスケープする必要があります)。 –
これは役立つかどうか分かりませんが、Rubyで提供した正規表現を試してみました。最後から 'g'を削除して、最初の部分の前後に括弧を入れてみました。http:// rubular。 – evanrelf
@WiktorStribiżew私は実際にそれをエスケープしていますが、私のポストに反映されませんでした。私はそれを更新します。 @evanrelf提案していただきありがとうございます。私は旗で遊んだが、まだ「ヌル」に終わっている。 –