我将输入几个句子,输出将用方括号括起来。我到目前为止尝试过:
$('.addCharacter').click(function(event) {
var textareaInput=$('.textareaInput').val();
var myString = '[' + textareaInput + ']';
console.log(myString);
});
输入:
demo text one
demo text two
demo text three
输出:
[demo text one
demo text two
demo text three]
但我希望输出应该是:
[demo text one]
[demo text two]
[demo text three]
我认为可以用正则表达式来完成。我在正则表达式中不是很好。可以有人告诉我这个方法吗?
答案 0 :(得分:5)
替换此行
var myString = '[' + textareaInput + ']';
与
var myString = '[' + textareaInput.split("\n").join("]\n[") + ']';
如果您获得额外空间,请使用此正则表达式(/\s*\n\s*/
)进行拆分
var myString = '[' + textareaInput.split(/\s*\n\s*/).join("]\n[") + ']';
答案 1 :(得分:4)
使用带有replace()
的正则表达式 m(multiline)
modifier
多行;将开始和结束字符(^和$)视为多行(即匹配每行的开头或结尾(由\ n或\ r分隔),而不仅仅是整个输入字符串的开头或结尾)(取自here)
var textareaInput = `demo text one
demo text two
demo text three`;
var myString = textareaInput.replace(/^[^\S\r\n]*(.*?)[^\S\r\n]*$/gm, '[$1]');
console.log(myString);
<小时/> 更新:更新正则表达式以匹配开头和结尾处的空格(不是换行符)。 (如 @WiktorStribiżew回答)
var textareaInput = `demo text one
demo text two
demo text three`;
var myString = textareaInput.replace(/^.*$/gm, function(m) {
return '[' + m.trim() + ']'
});
console.log(myString);
使用 split()
和 join()
可以完成此处添加的方法,而不是 {{3} 使用 join()
你可以做这样的事情来获取乐趣:)
var textareaInput = `demo text one
demo text two
demo text three`;
var myString = textareaInput.split(/\n/).reduce(function(a, b) {
return (a.length ? a + '\n' : '') + '[' + b.trim() + ']'
}, '')
console.log(myString);
答案 2 :(得分:3)
非正则表达方式:
var textareaInput = `demo text one
demo text two
demo text three `;
var res = '[' + textareaInput.split("\n").map(x => x.trim()).join("]\n[") + ']';
document.body.innerHTML = "<pre>" + res + "</pre>";
&#13;
您也可以使用正则表达式方法:
var myString = textareaInput.replace(/^[^\S\r\n]*(.*?)[^\S\r\n]*$/gm, "[$1]");
^[^\S\r\n]*(.*?)[^\S\r\n]*$
模式将匹配任何行(由于/m
修饰符使^
与行开头匹配,$
与行结束匹配),即使是空一个(由于*
量词匹配零次或多次出现),并替换为[
,行直到最后一个空格< / strong>,]
($1
是对第1组值的反向引用)。
详细说明:
^
- line start [^\S\r\n]*
- 零个或多个水平空格(不删除空行)(.*?)
- 任何字符,但换行符尽可能少,直到第一个[^\S\r\n]*
- 零个或多个空格$
- 行尾请参阅regex demo
var re = /^[^\S\r\n]*(.*?)[^\S\r\n]*$/gm;
var str = `demo text one
demo text two
demo text three`;
var result = str.replace(re, '[$1]');
document.body.innerHTML = "<pre>" + result + "</pre>";
&#13;
答案 3 :(得分:2)
您可以使用reduce()
方法代替RegEx:
$('.addCharacter').click(function(event) {
var textareaInput=$('.textareaInput').val().split('\n');
var output = '';
$(textareaInput).each( function() {
output += '[' + this + ']\n';
});
console.log(output);
});
在这种情况下,它将创建一个包含所有换行符的数组,您将能够按照自己的方式连接每个新行。