2016-05-02 23 views
0

正規表現パターンと一致する部分文字列に一致する正確な文字(正確な文字列が一致する正確な文字)2文字より長い部分文字列に一致するRegext

otaまたはotの代わりにpotまたはpotatoのみをハイライトし、ユーザータイプがpotaの場合は検索ボタンをクリックしてください。

enter image description here

マッチした文字列が強調表示された場合、以下のコードを見つけてください。

// Core function 
function buildRegexFor(find) { 
    var regexStr = find.substr(0,3); 
    for (var i = 1; i < find.length - 2; i++) { 
     regexStr = '(' + regexStr + find.substr(i+2,1) + '?|' + find.substr(i,3) + ')'; 
    } 
    return regexStr; 
} 

// Handle button click event 
document.querySelector('button').onclick = function() { 
    // (1) read input 
    var find = document.querySelector('input').value; 
    var str = document.querySelector('textarea').value; 

    // (2) build regular expression using above function 
    var regexStr = buildRegexFor(find); 

    // (3) apply regular expression to text and highlight all found instances 
    str = str.replace(new RegExp(regexStr, 'g'), "<strong class='boldtxt'>$1</strong>"); 

    // (4) output 
    document.querySelector('span').textContent = regexStr; 
    document.querySelector('div').innerHTML = str; 
}; 

入力ボックスに1つの文字列、もしタイプメーターとして「メートル&パラメータ」を考慮して検索ボタンをクリックしてください。メーターを強調表示する必要があります。事前にお尋ねください。

+0

いいえ、私はスクリーンショットを撮って添付しました –

+0

**画像を表示することができない場合、またはそれへの参照、または他の誰もできない場合、 jsフィドルの画像は、フィドル自体へのリンクよりもはるかに役に立たない。イメージが表示されるようにマークアップを修正しましたが、あなたの質問は不明です。 – AD7six

+0

最初の文は何ですか? – Aaron

答えて

1

forループは、find.length-2より小さい値に設定されています。 find.lengthは4です。4-2は2です。したがって、forループは、iが1よりも小さく、iが2より小さい値に設定されます。つまり、正確に1回だけ動作しています。私はあなたがループのために何をしようとしていると思っていたのか分かりませんが、そうではないと賭けています。

forループの前に、regextrは文字列pot(最初の3文字は検索文字列)と同じに設定されます。forループの最初の(そして唯一の)時間は新しい値に設定されます。 paren、既存の値(ポット)、find(a)の4番目の文字、疑問符、縦棒、2番目から始まる3文字の文字列を組み合わせて入れてください:

(pota?|ota)

RegExは文字列「pota」(aはオプションで、「pot」も有効です)または文字列「ota」のいずれかを見つけると言いますので、pota、pot、otaのインスタンスはすべて見つかったとh強く

「pota?」が必要な場合は、forループ内のその行の右半分を削除してください。さらに良い点は、サブルーチン全体を?文字を検索文字列に追加します。

関連する問題