用于在多行文本区域中搜索表达式的 Javascript 正则表达式

标签 javascript regex

假设有一个具有以下值的文本区域(“*”用作项目符号点):

*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/

相关文章:

regex - 在文件上使用正则表达式来提取数据。多线有问题

javascript - 问题 : ng-repeat with specific view should be displayed on click

javascript - 每个循环中只有 jquery 中的第一个元素得到更新

java - 尝试通过正则表达式删除CSS规则

c# - 替换双引号 html 属性中的双引号

javascript - 使用jquery获取<tag>的内容

javascript - NodeJS 正则表达式匹配字符串中的 4 位数字与 'OR' 字

javascript - 最有用的 jQuery native API 函数

javascript - Puppeteer:如何下载整个网页供离线使用

javascript - onunload如何才能正常工作?