JavaScript正则表达式,一次拆分和匹配



我有看起来像这样的输入字符串

inspect [foo - bar] with [errors - 15] 
create [doodle]
force delete [quux]

即,包含方括号内信息的行。

我想要的是一次取其中一行并得到一个数组,例如

["inspect", "[foo - bar], "with", "[errors - 15]"]

使用正则表达式,可以轻松地分别收集带括号的表达式和带括号的表达式之间的部分:

var src = "inspect [foo - bar] with [errors - 15]"
var regexBracketed = /[[a-zA-Z0-9_- ]+]/g;
// this returns an array of the bracketed expressions
console.log(src.match(regexBracketed));
// and this returns an array of the parts between the expressions
console.log(src.split(regexBracketed));

有没有一种简单的方法可以在一个数组中获取所有内容?也许我以完全错误的方式攻击它。

你指的是组(捕获括号)吗? /(.*)/

https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions#Using_Parenthesized_Substring_Matches

例如,如果要捕获括号中的字符串,则可以使用以下命令:

var r=/^s*[^[]]*[([^[]]+)](?:[^[]]*[([^[]]*)])?s*$/;
var m = "inspect [foo - bar] with [errors - 15] ".match(r);
console.log(m[1], m[2]);

您也可以向表达式添加s*以修剪空格。

这是我这样做的方式,加上一个jsFiddle。

var src = "inspect [foo - bar] with [errors - 15] " +
          "create [doodle] " +
          "force delete [quux]";
var regex = /[^[]+|[^]]+]/g;
document.write(src.match(regex));​

输出:

inspect ,[foo - bar], with ,[errors - 15], create ,[doodle], force delete ,[quux]

我相信您知道如何随心所欲地修剪空格:)

为了解释正则表达式,它看起来有点神秘,它只是说,"让我的所有角色都达到一个[,或者,如果你已经在[,那么让我所有的字符都达到],再加上那个]请!

@akonsu是对的,只需添加括号即可,如下所示:

var src = "inspect [foo - bar] with [errors - 15]";
var regexCapturing = /([[a-zA-Z0-9_- ]+])/;
console.log(src.split(regexCapturing));

它输出

 ["inspect ", "[foo - bar]", " with ", "[errors - 15]", ""] 

一些空格修剪并跳过最后一个空字符串,我就准备好了。谢谢。

(我只是写这个作为答案,因为我不能在注释中使用代码格式。

最新更新