複数のソースからのツイートを演習として照合するウィジェットをコーディングしようとしています(ここに似たようなものがありますが、a)そこで提供されるリストオプションは私のリストをロードしませんでした、b)それは便利な学習演習です!)。その一環として、Twitterハンドル(「@」の後に文字が続く)をユーザーのTwitterページへのリンクに置き換える正規表現を作成したいと思いました。ただし、たとえば、ツイート内の電子メールアドレスの誤検知は望ましくありませんでした。
したがって、たとえば、交換は送信する必要があります
Hey there @twitteruser, my email address is address@gmail.com
に
Hey there <a href="http://twitter.com/twitteruser">@twitteruser</a>, my email address is address@gmail.com
この質問に導かれて、Javascriptでネガティブな後読みを複製する何らかの方法が必要であることを示唆し、次のコードを作成しました。
tweetText = tweetText.replace(/(\S)?@([^\s,.;:]*)/ig, function($0, $1){
return $1 ? $0 + '@' + $1 : '<a href="http://www.twitter.com/' + $0 + '">@' + $0 + '</a>'
});
ただし、三項演算子の最後の部分がトリガーされる場合、$0には「@」記号が含まれます。これは私にとっては予想外でした-「@」は括弧で囲まれていなかったので、$ 0は「([^ \ s、。;:] *)」と一致すると予想しました-つまり、Twitterユーザーのユーザー名(後、なし、「@」)。$ 0.substring(1)を使用することで目的の機能を取得できますが、理解を深めたいと思います。
誰かが私が誤解していることを指摘してもらえますか?私は正規表現にまったく慣れておらず、Javascriptで記述したことも、ネガティブな後読みを使用したこともありません。