Javascript Regular Expression搜索多行textarea表达式

时间:2016-01-18 08:23:17

标签: javascript regex

我们假设有一个textarea具有以下值(' *'用作项目符号点):

*south
*north
*west 

我希望能够使用正则表达式自动生成这些单词的数组,就像这样。

["south","north","west"]

下面是我试过的表达式。

/\*.*/gm.exec(text)

不幸的是,它会返回它。

["*south"]

显然,RegExp识别出有一个换行符,它只返回第一个项目,但它没有拾取第2和第3行。

/\*.*/gm.exec('*south \n *north')

这也有相同的结果。

3 个答案:

答案 0 :(得分:2)

你必须运行一个循环。

var re = /\*(.*)/gm; 
var str = '*south\n*north\n*west ';
var m;

while ((m = re.exec(str)) !== null) {


    // View your result using the m-variable.
    // eg m[0] etc.
}

参见演示。

https://regex101.com/r/iJ7bT6/11

或者按(?=\*)分割。请参阅演示。

https://regex101.com/r/iJ7bT6/12

答案 1 :(得分:2)

你需要告诉正则表达式引擎在^一行的开头匹配,并且捕获第一个*之后带有一对非转义括号的部分。然后,您可以在循环中使用RegExp#exec(),并获得第1组中所需的值。^\s*\*\s*(.*) regex匹配:

  • ^ - 一行开始(由于/m多行修饰符)
  • \s* - 零个或多个空白符号
  • \* - 文字星号
  • \s* - 再次,可选的空格
  • (.*) - 除换行符外的零个或多个字符。



var re = /^\s*\*\s*(.*)/gm; 
var str = '*south\n *north\n* west ';
var res = [];
 
while ((m = re.exec(str)) !== null) {
    res.push(m[1]);
}
document.write("<pre>" + JSON.stringify(res, 0, 4) + "</pre>");
&#13;
&#13;
&#13;

另一种解决方案:

使用换行符拆分(如果可以\r\n,则可以使用正则表达式)然后删除最初的*

&#13;
&#13;
var str = '*south\n*north\n*west ';
var res = [];
str.split(/[\r\n]+/).forEach(function(e) {
      res.push(e.replace(/^\s*\*\s*/, '')); 
  });
document.write("<pre>" + JSON.stringify(res, 0, 4) + "</pre>");
&#13;
&#13;
&#13;

答案 2 :(得分:2)

@VKS解决方案有效,但如果不是必须使用正则表达式,那么试试这个fiddle

<textarea id="textA1"></textarea>

$( "#textA1" ).blur( function(){

   var value = $( this ).val();
   console.log( value.split( "\n" ) );

} )