4

私の質問に答えるために広範囲に検索しましたが、すべてが複雑にはほど遠いようです。私は Javascript の初心者です。誰かが答えるだけではなく、この質問について助けてほしいと思います (率直な回答が必要な場合は、内訳を書いていただけると助かります)。

HTML テキスト領域から文字列を取り込む関数があります。リンクの文字列を検索する必要があるため、「www.」を検索します。または「http://」。次に、リンクの終わり (またはスペースが表示される) まで、その部分をループする必要があります。これは変数として保存する"<a href = newVar>"必要があり、最初に a を配置し、その後に新しい変数を配置し、</a>タグで終了する必要があります。

文字列内に多数の URL が含まれる場合があります。

これを for ループとして実行する必要があります。

開始コードのようなものがありますが、非常に行き詰まっています! どんな助けでも大歓迎です!

//Checking for URL's in the message string
function checkLink(text)
{
    for (var i=0; i == text.length; i++)
    {
        var currentChar = text.charAt(i);
        if(text.charAt(i) == "w" && text.charAt(i+1) == "w" && text.charAt(i + 2) ==  "w" && text.charAt(i + 3) == ".")
        {
            //Not to sure what to do here
        }
    }
}
4

2 に答える 2

2

正規表現は、これを行うための最善の方法です。ただし、これは教育目的であるため、文字列内のURLを検索する方法を次に示します。正解ではありませんが、概念を示しています。

以下にこのテキストがあるとしましょう:

Lorem ipsum dolorは、amet、consecteturadipiscingelitに座ります。Duis faucibus dui nec estauctorauctor。Nullam vulputate、augue non auctor rhoncus、urna urna tempus velit、non tincidunt nibh orcietelit。整数sednibhmassa、egetvestibulumvelit。www.Nulla.com in elit vitae massa egestas accumsan acsempernisl。urnaporttitorのCurabiturviverraloremは、amet aliquamsapienhttp://imperdiet.orgに座っています。Pellentesque ultriciessagittismalesuada。Mauris lobortisaliquamfelisは前庭に座っています。vitaefaucibuslectusで。Donec consecteturantenisi。Lorem ipsum dolorは、amet、consecteturadipiscingelitに座ります。サスペンドポテンティ。

そこには2つのリンクがあります。コードは次のようになります。

どういうわけか、変数でテキストを取得します。これをと呼びますtext

var text = '<that text above>';

次に、テキストを。という配列に分割しますwords

var words = text.split(' ');

この例では新しい出力を生成するため、それを保持するための文字列変数が必要です。

var new_text = '';

ループを理解しているようですが、これは配列を通過するほとんどのループがどのように見えるかを示しています。

for (var i=0; i < words.length; i++) {
    var word = words[i];

この「単語」の先頭(このコンテキストでは、スペースで区切られたテキストの各セクションを参照)にいずれかのプレフィックスが含まれているかどうかを確認します。実際には、bit.lyは有効なURLです。正規表現は、私たちよりもこれをうまく処理します。

    if (word.indexOf('http://') === 0 || word.indexOf('www.') === 0) {

リンク構文を配置して、単語の値を変更します。Markdownを使用しましたが、HTMLなど何でもできます。

         word = '[A LINK]' + '(' + word + ')';
    }

これは、スクリプトの冒頭で説明した出力です。変更されたかどうかに関係なく、これに物事を追加し続けてください。これに伴う問題は、単語の後に1つまたは94のスペースがある可能性があることですが、常に1つ戻します。正規表現には、これをより適切に処理する機能があります。

    new_text += word + ' ';
}

new_text今はこのように見えます。

Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Duis faucibus dui nec est auctor auctor. Nullam vulputate, augue 
non auctor rhoncus, urna urna tempus velit, non tincidunt nibh 
orci et elit. Integer sed nibh massa, eget vestibulum 
velit. [A LINK](www.Nulla.com) in elit vitae massa egestas
accumsan ac semper nisl. Curabitur viverra lorem in urna 
porttitor sit amet aliquam sapien [A LINK](http://imperdiet.org.) 
Pellentesque ultricies sagittis malesuada. Mauris lobortis aliquam 
felis sit amet vestibulum. In vitae faucibus lectus. Donec 
consectetur ante nisi. Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. Suspendisse potenti. 

スタックオーバーフローでは、次のようになります。

Lorem ipsum dolorは、amet、consecteturadipiscingelitに座ります。Duis faucibus dui nec estauctorauctor。Nullam vulputate、augue non auctor rhoncus、urna urna tempus velit、non tincidunt nibh orcietelit。整数sednibhmassa、egetvestibulumvelit。elit vitae massa egestas accumsan acsempernislのリンク。Curabitur viverra lorem in urna porttitor sit amet aliquam sapien A LINK Pellentesque ultriciessagittismalesuada。Mauris lobortisaliquamfelisは前庭に座っています。vitaefaucibuslectusで。Donec consecteturantenisi。Lorem ipsum dolorは、amet、consecteturadipiscingelitに座ります。サスペンドポテンティ。

問題に気づきましたか?分割手法では、「http://imperdiet.org 」が表示されました。URLとして。ユーザーが意味するのは、「http://imperdiet.org」をURLとし、その後にピリオドを付けることでした。正規表現を使用すると、これを回避することもできます。

デモには、間に私の解説がないすべてのコードが含まれています。

デモ

正規表現について知りたい場合は、このサイトをお勧めします。

于 2013-02-26T00:09:40.420 に答える
1

スペースで分割して、各単語を繰り返すことをお勧めします。

//split string by any space characters
textarea.value.split(/\s/).reduce(function (prev, cur) {
    //word starts with http; convert to link
    if (cur.indexOf('http') === 0) {
        cur = '<a href="' + cur + '">' + cur + '</a>';
    }
    //word starts with www; convert to http://+link
    else if (cur.indexOf('www') === 0) {
        cur = '<a href="http://' + cur + '">' + cur + '</a>';
    }
    //append space to display properly
    return prev + cur + ' ';
}, '');

正確なスペースが保持されないため、このソリューションは完全ではありません。また、検索するのは適切ではhttpありませんhttps?://が、これらの問題を理解するのはあなたに任せます。

http://jsfiddle.net/98gMb/

于 2013-02-26T00:11:46.567 に答える