2010-08-10 169 views
0

我有这种类型的文本只选择大写字母:正则表达式从另一个正则表达式

 
!D este caro 
1 C este descgiderea 
C1 este alta deschidere 
Deschiderea de 1C este cu 
2C 
2D 
3 D 
1NT 
2D 
123456P 

这容易的正则表达式:

/([0-9][CDHS])/g 

选择 “1C”, “2C”, “2D” ,“2D”(紧接着[CDHS]后面的数字)。

我想要的只是从上面的序列中选择字母(从“1C” - “仅C,从”2D“仅D,等等......)。我如何使用正则表达式来做到这一点?

乐:虽然博洛的方法确实RegExr工作,jQuery的似乎并不:(

下面的代码:

$(document).ready(function() 
     { 
       var de_inlocuit = [/!C/gi, /!D/gi,/!H/gi,/!S/gi,/(?<=[0-9])[CDHS]/g]; 
     var replace = ['<img src="/sites/default/files/c.gif"/>', '<img src="/sites/default/files/d.gif"/>','<img src="/sites/default/files/h.gif"/>','<img src="/sites/default/files/s.gif"/>','test' ]; 
     //<img src="/sites/default/files/c.gif"/> 
     var i=0; 
     for (i=0; i < de_inlocuit.length; i++) 
     { 
     $('body table tr td').replaceText(de_inlocuit[i], replace[i]); 
     } 

     }); 

的行为是正常的,如果我删除/(?<=[0-9])[CDHS]/g,但因为它插入到代码,它甚至不取代其他(肯定)工作正则表达式

+0

桥?优秀! – 2010-08-10 21:56:48

+0

确实,我生命中的药物 – andrei 2010-08-10 21:57:32

+0

而我的猜测是BBO的桥梁:-) – 2010-08-10 22:00:23

回答

1

要使用这个正则表达式捕获组,如:

/([0-9])([CDHS])/g 

...只需插入适当的编号组引用到替换字符串,例如:

"rank=$1, suit=$2" 

JavaScript的正则表达式不支持lookbehinds,所以这种方法是行不通的。理由@博罗的解决方案在RegExr中工作是因为这是一个Flex应用程序。在this one这样的JavaScript测试版测试器中试试,你会得到更相关的结果。

Adob​​e将其ActionScript正则表达式广告宣传为与JavaScript兼容,具有相同的支持功能列表,但它们实际上功能更强大,由PCRE library供电。因此,请注意使用JavaScript测试程序来测试您的JS正则表达式,而不是像RegExr或RyanSwanson.com这样的Flex工具。

+0

+1非常翔实! – Bolo 2010-08-14 20:02:50

1

以数字关闭捕获组:

/[0-9]([CDHS])/g 

顺便说一句,原始模式不匹配在字母和数字之间有空格的字符串。您可以允许使用可选的空间:

/[0-9]\s*([CDHS])/g 
+0

您还必须确保选择第一个捕获组,而不是第零个(整个字符串)。 – jtbandes 2010-08-10 21:58:44

+0

对不起,不起作用 – andrei 2010-08-10 21:59:14

+0

您使用哪种语言? – Aillyn 2010-08-10 22:13:37

0

第一种选择:使用positive lookbehind

/(?<=[0-9])[CDHS]/g 

第二个选项:使用capturing group(如Aillyn的答复中提到):

/[0-9]([CDHS])/g 

然而,在第二种情况下,您必须采取捕获组的内容,而不是整个比赛(即,gro向上#1而不是#0组)。如何做到这一点取决于你正在使用的编程语言。

+0

谢谢,第一个选项很棒! – andrei 2010-08-10 22:18:44

+0

在这种情况下,我认为在这种情况下使用零宽度断言并不合理,但是如果它起作用......我只是好奇为什么第二个选项不起作用。 – Aillyn 2010-08-10 22:28:39

+0

那么我真的不知道如何只显示第一个捕获组而不是整个匹配。我在jQuery脚本中使用这个正则表达式(实际上是replacetext函数)。 使用http://gskinner.com/RegExr/,/ [0-9]([CDHS])/ g进行测试不起作用。我会很高兴,如果有人向我解释如何只选择第一组 – andrei 2010-08-10 22:33:24