我正在编写一个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>
答案 0 :(得分:0)
避免将标记添加到空行只是添加
的问题!lines[i].trim() ||
...到if
的开头。接受该行,从中删除任何前导和尾随空格,并查看结果是否为空。 (""
是 falsy 值,因此!""
为true
。)如果为空,则会跳过正则表达式检查(因为||
短-circuits如果左手操作数是真的,我们进入if
块(所以我们不添加标记到空行)。
||
,而不是|
[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>