我们假设有一个textarea具有以下值(' *'用作项目符号点):
*south
*north
*west
我希望能够使用正则表达式自动生成这些单词的数组,就像这样。
["south","north","west"]
下面是我试过的表达式。
/\*.*/gm.exec(text)
不幸的是,它会返回它。
["*south"]
显然,RegExp识别出有一个换行符,它只返回第一个项目,但它没有拾取第2和第3行。
/\*.*/gm.exec('*south \n *north')
这也有相同的结果。
答案 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
或者按(?=\*)
分割。请参阅演示。
答案 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;
另一种解决方案:
使用换行符拆分(如果可以\r
或\n
,则可以使用正则表达式)然后删除最初的*
:
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;
答案 2 :(得分:2)
@VKS解决方案有效,但如果不是必须使用正则表达式,那么试试这个fiddle
<textarea id="textA1"></textarea>
$( "#textA1" ).blur( function(){
var value = $( this ).val();
console.log( value.split( "\n" ) );
} )