使用正则表达式检查是否存在新行

时间:2017-03-16 08:13:00

标签: javascript html regex

我正在编写一个javascript,在开头添加{y},在结尾添加{/ y}非英文字符。我还需要它留空线。但在当前情况下,它将{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>

1 个答案:

答案 0 :(得分:0)

避免将标记添加到空行只是添加

的问题
!lines[i].trim() || 

...到if的开头。接受该行,从中删除任何前导和尾随空格,并查看结果是否为空。 ("" falsy 值,因此!""true。)如果为空,则会跳过正则表达式检查(因为||短-circuits如果左手操作数是真的,我们进入if块(所以我们不添加标记到空行)。

但是Wiktor pointed out

  • 对于逻辑OR操作,它是||,而不是|
  • [A-z]匹配大写字母A和小写字母z之间的所有字符。在Z之后和之前有很多字符也会匹配。

另外:[A-z]|[0-9]{2}表示“单个字符A到z或两个数字”。如果这就是你真正的意思,那很好,但如果你的意思是“两个字符是A到z或0到9”,你就把它们组合成一个字符类。我没有完成下面的工作,根据理论,你可能希望条件是这样的。

最后:如果您要做的就是检查字符串是否与表达式匹配,那么您不希望match;相反,在表达式上使用test。 E.g。

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>