2009-07-26 85 views
2

我想得到一个正则表达式,将提取出以下内容。我有一个正则表达式来验证它(我拼凑在一起,所以它可能不是最好的或最有效的)。帮助正则表达式从括号内提取值

some.text_here:[12,34],[56,78] 

冒号前的部分可以包含句点或下划线。冒号后面的括号中的数字是坐标[x1,y1],[x2,y2] ...我只需要这里的数字。

这里是我用的是(对JavaScript)的正则表达式验证:

^[\w\d\-\_\.]*:(\[\d+,\d+],\[\d+,\d+]) 

我是相当新的正则表达式,但我无法弄清楚如何提取值,所以我可以

name = "some.text_here" 
x1 = 12 
y1 = 34 
x2 = 56 
y2 = 78 

感谢您的帮助!

+1

仅供参考,`[\ W \ d \ - \ _ \。]`在你的正则表达式(1)`\ w`匹配数字和下划线以及字母,(2)`.`在字符类中没有特殊的含义,(3)` - '与'[\ w .-] `如果是列出的第一个或最后一个字符,则没有特殊意义。 – 2009-07-27 04:06:02

+0

谢谢你的澄清:) – Mottie 2009-09-20 16:30:39

回答

1

试试这个正则表达式:

/^([\w\d-_.]*):\[(\d+),(\d+)],\[(\d+),(\d+)]/ 

var str = "some.text_here:[12,34],[56,78]"; 
var match = str.match(/^([\w\d-_.]*):\[(\d+),(\d+)],\[(\d+),(\d+)]/); 
alert("name = " + match[1] + "\n" + 
     "x1 = " + match[2] + "\n" + 
     "x2 = " + match[3] + "\n" + 
     "y1 = " + match[4] + "\n" + 
     "y2 = " + match[5]); 
+0

谢谢Gumbo,这个作品很棒......但我仍然需要把名字提取出来。我能够使用CMS的正则表达式代替你的,并且它使匹配[1]包含名称。谢谢! – Mottie 2009-07-26 18:57:14

1

你想要的东西,如:

/^(\S+):\[(\d+),(\d+)\],\[(\d+),(\d+)\]/ 

我不知道如果JavaScript的支持caputre群体的命名,但如果它没有,你可以在如加的。

3

您可以使用字符串match方法:

var input = "some.text_here:[12,34],[56,78]"; 

var matches = input.match(/(.*):\[(\d+),(\d+)\],\[(\d+),(\d+)\]/); 

var output = { 
    name: matches[1], 
    x1: matches[2], 
    y1: matches[3], 
    x2: matches[4], 
    y2: matches[5] 
} 

// Object name=some.text_here x1=12 y1=34 x2=56 y2=78