2013-07-17 202 views
1

我试图用一个正则表达式返回字符串匹配

此得到的只是一个字符串的一部分是我测试

class1 container _box _box_CEC493

的字符串,长度为应用于一系列的类元件。

什么,我想得只是CEC493这改变,因为正则表达式将被应用到很多不同的元素(因此字符串像上面的)

我现在使用的正则表达式是

/\s_box_([0-9a-zA-Z]+)/

返回

_box_CEC493, CEC493

如何修改它以获得第二个值(CEC493)?

谢谢

+0

是它始终将是'CEC493'或者是该值的动态?它有时会成为'CEC523'吗? – Banning

+3

'_box_CEC493,CEC493'看起来像匹配*数组*看作一个字符串,在这种情况下'CEC493'在'matchVar [1]' –

+0

@Banning是它是一个动态值。 – Donnie

回答

2

你很可能只是分割字符串:

var str = "class1 container _box _box_CEC493"; 
var match = str.split('_').pop(); 
alert(match); 

DEMO

+1

我认为他想要使用正则表达式,尽管这也可以工作 –

+0

只要'CEC493'总是在这个工作结束 – Banning

0

的标准方法的正则表达式回来是这样的:

[0]:整个结果

[1]:第一个括号捕获组

使人们访问这些标准的方法是用result[1]。这是否会导致您的案件有任何问题?

+0

这就是我现在做的。 但有可能是正则表达式不匹配任何东西,所以结果[1]将为空。 我认为实际上有一种方法可以直接通过正则表达式达到我想要的结果。谢谢您的意见。 – Donnie

+0

为什么不检查'typeof result [1] =='undefined''? – casraf

+0

除非您的捕获组被标记为可选,否则数组将存在两个值,否则测试函数将完全返回null。既然你使用了+而不是*,那么为了匹配,组中必须有一些东西。 – Katana314

0

[更新]

,而不是选择所有的字符,直到选择不必要的字符,,因为你是从数量的类选择,有可能是你有单独_box_..类没有空间在它之前,所以不要在正则表达式选择器的开始处使用空格。

str.match(/_box_([^\s]*)/)[1] 

jsfiddle