これまでに1000回も聞かれたことは知っていますが(お詫び)、SO/Googleなどを検索してもまだ決定的な答えは得られていません。
基本的に、文字列を渡すと、正規表現に基づいてすべてのURLを識別して抽出し、見つかったすべての配列を返すJS関数が必要です。例えば:
function findUrls(searchText){
var regex=???
result= searchText.match(regex);
if(result){return result;}else{return false;}
}
関数は、潜在的なURLを検出して返すことができる必要があります。私はこれに内在する困難/問題(括弧を閉じるなど)を認識しているので、プロセスは次のようにする必要があると感じています。
文字列(searchText
)を開始/終了する個別のセクションに分割します。そのいずれかの側にスペースまたはキャリッジリターンがあり、分割を行うなど、個別のコンテンツチャンクが生成されます。
分割の結果として生じる各コンテンツチャンクについて、それが任意の構造のURLのロジックに適合するかどうか、つまり、テキストの直後にピリオドが含まれているかどうかを確認します(潜在的なURLを修飾するための1つの一定のルール)。
正規表現は、ピリオドの直後に、tld、ディレクトリ構造、およびクエリ文字列で許可されるタイプの他のテキストが続き、URLで許可されるタイプのテキストが前にあるかどうかを確認する必要があります。
誤検知が発生する可能性があることは承知していますが、戻り値はURL自体の呼び出しでチェックされるため、これは無視できます。私が見つけた他の関数は、存在する場合、URLクエリ文字列も返さないことがよくあります。
したがって、関数は、will.i.amを有効なものとして識別することを意味する場合でも、テキストのブロックから任意のタイプのURLを返すことができるはずです。
例えば。http://www.google.com、google.com、www.google.com、http://google.com、ftp.google.com、https://など...およびクエリ文字列を使用したそれらの派生返される必要があります...
これがSOの他の場所に存在するが、私の検索では返されなかった場合は、再度お詫び申し上げます。