2013-07-03 154 views
0

我有一个正在通过正则表达式过滤到不同数组中的数据数组。其中一个数组用于包含对我的程序来说被认为“太长”的数据。并非所有这些“太长”的实例都是相同的长度,但我想缩短它们。正则表达式匹配的长度

我想要类似DRB1 * 01:02的东西。

太长就像DRB1什么* 01:02:03或更长的时间,包括像DRB1 * 01:02:03:ABC:29

然而,在前面的字母不会总是相同长度。我将处理诸如A * 1:01:02或TIM * 01:02之类的事情。所以我专门研究了两个整数和它们前面的冒号的集合,也许是在数据中可能会出现“太长”的任何字母。我希望信件在前面,明星,以及两套数字和它们之间的冒号。

我想使用正则表达式来查找“太长”的数据片段,然后测量它匹配的数据的长度,并向后切片以将其删除。

事情是这样的,它会告诉我DRB1 * 01:02:03匹配* 01:02:03和长度是9。对于DRB1 * 01:02:03:abc:它匹配的地方* 01:02:03:abc:29并告诉我这个长度是16。

有什么方法可以找到正则表达式匹配的数据部分的长度吗?包括正则表达式不标记明确结束的情况?

我正在使用JavaScript。

+5

什么编程语言?例如,在C#中,Regex对象的.Captures属性将返回匹配的子字符串,但是它会因语言而异。 – welegan

+0

哎呀,忘了提。的JavaScript。 – user2494584

+0

你的意思是“正则表达式并不表示明确的结局”?不是直到字符串的结尾? – Barmar

回答

1

使用捕获组,以获得*后相匹配的部分:您使用

var matches = str.match(/^[A-Z]+(\*.*)$/); 
if (matches) { 
    var len = matches[1].length; 
    alert("It's "+len+" characters long"); 
} 
+0

这给了我整个匹配条目的长度。我想知道它匹配的条目部分的长度。 – user2494584

+0

'matches [0]'是整个匹配项,'matches [1]'是从*开始的部分。 – Barmar

+0

哎呦我输入不正确。有用。谢谢! – user2494584

0

Perlish的正则表达式

if (/([A-Z0-9]+\*\d+:\d+)(.+)/) { 
    print "too long, prefix:$1 extra stuff:$2 length:".length($2)."\n"; 
}