棘手的RegEx Capture

时间:2016-06-22 23:18:04

标签: javascript regex

我有两个字符串,我需要拉出双引号之间的字符。问题是,我想分组抓住它们。

var str = 'FF\"J"A4"L"';
var results = str.match(/\"(.*)\"/);

这将返回第一个和最后一个双引号之间的所有内容。在这种情况下,它返回 J" A4" L 但我需要它返回的是 J L

引号之间的内容几乎是任何unicode字符,如字母和数字,包括} = @

有关如何使用正则表达式完成此操作的任何想法?

2 个答案:

答案 0 :(得分:1)

你正在寻找的是/g"全球旗帜":

/("[^"]*")/g

在您的示例中,它是这样的:

var str = 'FF\"J"A4"L"';
var results = str.match(/("[^"]*")/g);

执行此操作时,results将为[""J"", ""L""],其中包含整个匹配(这就是为什么有额外的引号)。

如果你只想要匹配的组(只返回组,而不是整个匹配区域),你可以使用exec

var str = 'FF\"J"A4"L"';
var results = []
var r = /("[^"]*")/g
match = r.exec(str);
while (match != null) {
    results.push(match[1])
    match = r.exec(str);
}

现在,结果为["J", "L"]

答案 1 :(得分:1)

听起来引号之间的内容是除引号之外的任何字符,在这种情况下你可以逃脱

/"([^"]*)"/