假设有一个具有以下值的文本区域(“*”用作项目符号点):
*south
*north
*west
我希望能够像这样使用正则表达式自动生成这些单词的数组。
["south","north","west"]
下面是我试过的表达方式。
/\*.*/gm.exec(text)
不幸的是,它返回了这个。
["*south"]
显然,RegExp 识别出有一个换行符,因此它只返回第一个项目,但不获取第 2 行和第 3 行。
/\*.*/gm.exec('*south \n *north')
这也有相同的结果。
最佳答案
您需要告诉正则表达式引擎在一行的开头匹配^
,并捕获第一个*
之后的部分带有一对未转义的括号。然后,您可以使用 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>");
另一种解决方案:
用换行符拆分(如果可以是\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>");
关于用于在多行文本区域中搜索表达式的 Javascript 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34850076/