2013-11-02 56 views
0

我的串具有[1212,1212],[1212,11212],...什么是确切的正则表达式匹配正确的字符串?

我想提取每个值转换成例如一个数组我愿意1212,1212作为一对并评估一系列步骤。

尝试/[[0-9],[0-9]]/但它没有按照我的意愿去做任务。基本上我是Regex的noob,有人可以帮忙。

在此先感谢

回答

1

好像你只需要之前和逗号之后的匹配一个或多个数字,所以你可以做到以下几点:

"[1212,1212],[1212,11212]".match(/\d+,\d+/g) 

,这将给你的数组:["1212,1212", "1212,11212"]

要提取的对:

var result = "[1212,1212],[1212,11212]".match(/\d+,\d+/g); 

for (var i = 0; i < result.length; i++) { 
    var pair = result[i].match(/\d+/g), 
     left = pair[0], right = pair[1]; 

    alert("left: " + left + ", right: " + right); 
} 
+0

嗅探器和马修你的代码工作。并感谢它,但我选择这个作为最好的答案,因为它给了我一个额外的步骤,我想钻到左边,右边的组合,这是我因为懒惰而不应该做的。 谢谢大家:) –

+0

现在我有另一个查询。正则表达式是否支持Android本机浏览器?基于从正则表达式匹配中获得的匹配注入DOM元素的脚本的一部分似乎不适用于我的手机上的Android或Dolphin浏览器。 –

+0

它应该支持正则表达式,如果它支持JavaScript,可能会有一个不支持的dom调用。可能值得打开另一个问题来解决这个 –

1

您需要转义想要匹配的字面括号。您也可以使用\d来匹配“任何数字”,这使得它更整洁。而且,你只能匹配一个数字。您需要匹配“一个或多个”(+量词)

/\[\d+,\d+\]/g 

g修改查找字符串中的所有比赛,否则只有第一个被发现。

2

你需要为你的正则表达式一些修改才能正常工作:

/\[[0-9]+,[0-9]+\]/g 
  1. 你需要逃避方括号[,因为他们有特殊的意义。
  2. [0-9]只匹配一个数字,你需要+量词匹配一个或多个数字,因此[0-9]+
  3. 使用全局修饰符g来提取所有匹配项。

然后你就可以提取所有的值到一个这样的数组:

var input = "[1212,1212],[1212,11212]"; 
var pattern = /\[[0-9]+,[0-9]+\]/g; 
var result = []; 
var currentMatch; 
while((currentMatch = pattern.exec(input)) != null) { 
    result.push(currentMatch.toString()); 
} 
result; 

或者,如果你不需要先后找到一个匹配的时间,那么你可以使用String.match()为@马修·麦克维那样:

var input = "[1212,1212],[1212,11212]"; 
var result = input.match(/\[[0-9]+,[0-9]+\]/g); 
+0

只是想知道:没有任何理由只是让你自己做同样的编辑我的编辑被拒绝?此外,我还修复了一个错字... –

+1

@IngoBürk对不起,但我不是那个拒绝/批准你的编辑,当我试图看到它告诉我,它已经处理,当我刷新页面它已经消失了。无论如何,如果错字仍然存在,你可以自由修复它。谢谢。 –

+0

SO的神秘方式。无论如何,谢谢你的回答。 –

相关问题