javascript中的正则表达式匹配

时间:2012-03-28 05:53:20

标签: javascript regex

我有字符串SUM([A2:A10],[B2:B10],[C2:C10],[D2:D10]),我需要在数组中获取元素[A2:A10],[B2:B10],[C2:C10],[D2:D10],所以我在js中使用了match()。代码段是

var formula = "SUM([A2:A10],[B2:B10],[C2:C10],[D2:D10])";
var reg = /\[(a-zA-Z0-9)+\]/;
matches = formula.match(reg);

但我没有得到比赛。我希望正则表达式是错误的。我很难建立正则表达式。什么是正确的正则表达式?

6 个答案:

答案 0 :(得分:15)

试试这样:

var formula = 'SUM([A2:A10],[B2:B10],[C2:C10],[D2:D10])';
var reg = /\[\w+:\w+\]/g;
matches = formula.match(reg);

输出:

["[A2:A10]", "[B2:B10]", "[C2:C10]", "[D2:D10]"]

你的正则表达式是正确的方向,但不包括冒号和捕获的个别角色。我使用的\w转义序列是单词字符([a-zA-Z0-9_])的快捷方式,使其更具可读性。 g标志是获取所有匹配而不是第一个匹配所必需的。

答案 1 :(得分:2)

var formula = "SUM([A2:A10],[B2:B10],[C2:C10],[D2:D10])";
var reg = /\[.*?\]/g;
matches = formula.match(reg);

答案 2 :(得分:2)

var str = "SUM([A2:A10],[B2:B10],[C2:C10],[D2:D10])";

var matches = str.match(/\[[A-Z0-9:]+\]/g);
alert(matches);​

注意,您使用正则表达式上的g标志来获取所有匹配项。

您可以在此处看到它:http://jsfiddle.net/jfriend00/aTrLU/

答案 3 :(得分:2)

你需要的正则表达式是

/\[[A-Z][0-9]+:[A-Z][0-9]+\]/gi

g修饰符表示我们应该进行全局修改并返回所有结果,而不仅仅是第一个结果

i修饰符表示我们需要不区分大小写的匹配

假设你不想包括[E2:E10:],因为额外的分号

答案 4 :(得分:1)

您的正则表达式不包含冒号:

试试这个:/\[([0-9A-Z:]+)\]/,特别是为什么我在那里引用和不带引号的方括号。

另外,您的输入字符串未引用。

答案 5 :(得分:1)

我相信你忘记了引号。 此外,您所需要的也是全球旗帜。代码如下:

var formula = "SUM([A2:A10],[B2:B10],[C2:C10],[D2:D10])";
var reg = /\[[0-z]+:[0-z]+\]/g;
var matches = formula.match(reg);