2017-03-16 10 views
1

私は非英語文字の最後に{y}を追加し、最後に{/ y}を追加するjavascriptを書いています。空の行をそのまま残しておく必要もあります。しかし、現在のシナリオでは、空行/改行に{y} {/ y}を追加しています。正規表現を使用して新しい行が存在するかどうかを調べる

var lyrics = document.getElementById('userInput'); 
 

 
function printSong() { 
 
    var input = lyrics.value; 
 
    var lines = input.split('\n'); 
 
    var generatedText = ""; 
 
    for (var i = 0; i < lines.length; i++) { 
 
    if (lines[i].match(/[A-z]|[0-9]{2}/) != null | lines[i].match(/\s/) != null) { 
 
     generatedText = generatedText + lines[i] + '\n'; 
 
    } else { 
 
     generatedText = generatedText + "{y}" + lines[i] + "{/y}" + '\n'; 
 
    } 
 
    } 
 
    document.getElementById('output').value = generatedText; 
 
}
<div class="container-fluid"> 
 
    <div class="col-xs-12"> 
 
    <div class="col-xs-5"> 
 
     <textarea id="userInput" class="form-control" cols="40" rows="10" placeholder="Enter song lyrics here">testing 
 

 
அஇஉ்உ்உ</textarea> 
 
    </div> 
 
    <div class="col-xs-2" style="text-align: center"> 
 
     <button type="button" class="btn btn-success" onclick="printSong()">Generate tags</button> 
 
    </div> 
 
    <div class="col-xs-5"> 
 
     <textarea disabled id="output" class="form-control" cols="40" rows="10" placeholder="Generated Song"></textarea> 
 
    </div> 
 
    </div> 
 
</div>

+0

エディタで '<>'アイコンを注意してください。あなたの* HTML/CSS/JS *コードを置くことができ、それらを実行可能スニペットにすることができます。 – Rajesh

+2

注意すべき点は、ifと '[A-z]'の中で単項 '|'を使用しているだけで、ASCII文字以外のものにマッチすることです。 –

+0

英語以外の文字または英語以外の文字を検索したいですか? – ReadyFreddy

答えて

0

空白行にあなたのマーカーを追加避けることは、単にあなたのifの先頭に...

!lines[i].trim() || 

を追加するだけです。これは、行を取り、そこから先頭と末尾の空白を取り除き、結果が空であるかどうかを調べます。それが空白の場合(""はそう!""trueで、falsy値である。)、(左側のオペランドがtruthyある場合||短絡ので)それは正規表現のチェックをスキップして、私たちはifブロックに入ります(ので、我々空白行にマーカーを追加しないでください)。

しかしWiktor pointed outとして:論理OR演算のために

  • 、それは上部ケースAと小文字のzの間||、ない|
  • [A-z]一致するすべての文字があります。 Zの後ろには多くの文字があり、aの前にも一致する文字があります。

また、​​は、「1文字のAからZまたは2桁の数字」を意味します。それがあなたが本当に意味していたものですが、「AからZまたは0から9までの2つの文字」を意味する場合、それらを1つの文字クラスに結合します。私はこれを行っていない、理論上では、それが条件を望むかもしれません。

最後に、文字列が式に一致するかどうかを確認したい場合は、matchは不要です。式の代わりにtestを使用してください。例えば。

if (string.match(expression) != null) 

は、それが結果を知っているし、結果の配列を構築するために気にしないとすぐに正規表現エンジンの停止をすることができます

if (expression.test()) 

になります。これらの変更により

var lyrics = document.getElementById('userInput'); 
 

 
function printSong() { 
 
    var input = lyrics.value; 
 
    var lines = input.split('\n'); 
 
    var generatedText = ""; 
 
    for (var i = 0; i < lines.length; i++) { 
 
    if (!lines[i].trim() || /[a-zA-Z]|[0-9]{2}/.test(lines[i]) || lines[i].match(/\s/) != null) { 
 
     generatedText = generatedText + lines[i] + '\n'; 
 
    } else { 
 
     generatedText = generatedText + "{y}" + lines[i] + "{/y}" + '\n'; 
 
    } 
 
    } 
 
    document.getElementById('output').value = generatedText; 
 
}
<div class="container-fluid"> 
 
    <div class="col-xs-12"> 
 
    <div class="col-xs-5"> 
 
     <textarea id="userInput" class="form-control" cols="40" rows="10" placeholder="Enter song lyrics here">testing 
 

 
அஇஉ்உ்உ</textarea> 
 
    </div> 
 
    <div class="col-xs-2" style="text-align: center"> 
 
     <button type="button" class="btn btn-success" onclick="printSong()">Generate tags</button> 
 
    </div> 
 
    <div class="col-xs-5"> 
 
     <textarea disabled id="output" class="form-control" cols="40" rows="10" placeholder="Generated Song"></textarea> 
 
    </div> 
 
    </div> 
 
</div>

+0

これは私が正しく動作させる方法です。 '!lines [i] .trim()|| lines [i] .match(/ [a-zA-Z] | [0-9] {2} /)!= null || '!lines [i] .trim()'は何をしていますか? –

+0

@MichelleAshwini:私は説明していたはずです。 'lines [i]'が空白(空白以外)であるかどうかを調べ、そうであれば私たちを 'if'ブロックに入れます。 'lines [i]'は、もちろん、行です。 '.trim()'は空白を始めと終りから削除します。 '!'は結果の文字列をbooleanに変換して否定します。 '' ''は 'false'に強制するので、'! "" 'は' true'です。だから、空白の行はマーカーを取得しません。 –

+0

その説明をありがとう。また、私は代わりにテストを使用できるかどうかはわかりませんでした。私はテストを使用して終了しました。 '!lines [i] .trim()||を使うlines [i] .match(/ [a-zA-Z] | [0-9] {2} /)!= null ||私が '1'を持っていた場合には、タグを作成しませんでした。 இஉஊஉ'のときタグを追加した。代わりに、私はこの 'lines [i] .match(/ [A-z] | [0-9] {2} /)!= null ||を使いました。 ! /\S/.test(lines [i]) 'となります。これにより、両方のタグが追加されました。 இஉஊஉ'と '1.இஉஊஉ'。 –

関連する問題