JavaScript での正規表現文字列の置換に関して奇妙な問題が発生しています。この正規表現を使用して、複数の URL (たとえば、コメントや投稿) を含む可能性のある文字列内の URL を検索します。
/(?:https?:\/\/|www\.)\S+/gi
ただし、一致しない場合を除いて、1 つの URL のみに一致するという問題が発生しています。不安定ですが、一般的には 1 つの URL にのみ一致します (常に最初の URL であるとは限りません)。次の文字列を使用します。
"Test
http://google.com
http://google.com
http://google.com"
http://google.com
最初のインスタンスのみに一致します。
最終的な目標は、URL をリンクに置き換えることです。
str = str.replace(/(?:https?:\/\/|www\.)\S+/gi, '<a href="$&" target="_blank">$&</a>');
これを使用して、何が一致し、何が一致していないかをよりよく理解しています。
function getMatches(re, str) {
var matches = [],
match;
while ((match = re.exec(str)) !== null) {
matches.push(match[0]);
}
return matches;
}
ここで私が間違っていることを知っている人はいますか?
編集: 問題を引き起こしている私のデータで何かおかしいことが起こっているようです。