在Javascript

时间:2016-05-24 10:11:14

标签: javascript regex

我将输入几个句子,输出将用方括号括起来。我到目前为止尝试过:

  $('.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]

我认为可以用正则表达式来完成。我在正则表达式中不是很好。可以有人告诉我这个方法吗?

4 个答案:

答案 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回答)

Regex explanation here

Regular expression visualization

或使用 replace() 进行回调并应用 trim()

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)

非正则表达方式:

&#13;
&#13;
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;
&#13;
&#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

&#13;
&#13;
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;
&#13;
&#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);
});

在这种情况下,它将创建一个包含所有换行符的数组,您将能够按照自己的方式连接每个新行。