我有字符串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);
但我没有得到比赛。我希望正则表达式是错误的。我很难建立正则表达式。什么是正确的正则表达式?
答案 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);