正则表达式,只从另一个正则表达式中选择大写字母

时间:2010-08-10 21:56:01

标签: javascript jquery regex

我有这种类型的文字:

!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,依此类推......)。我怎么用正则表达式做到这一点?

le:虽然Bolo的方法确实在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,行为是正常的,但由于它已插入代码中,因此它甚至不会替换其他(当然)正在运行的正则表达式。

3 个答案:

答案 0 :(得分:1)

从捕获组中取出数字:

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

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

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

答案 1 :(得分:1)

使用捕获组,就像使用此正则表达式一样:

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

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

"rank=$1, suit=$2"

JavaScript正则表达式不支持lookbehinds,因此该方法不起作用。 @ Bolo的解决方案在RegExr中运行的原因是因为它是 Flex 应用程序。在像this one这样的JavaScript驱动程序中尝试使用它,您将获得更多相关结果。

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

答案 2 :(得分:0)

第一个选项:使用positive lookbehind

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

第二个选项:使用capturing group(如Aillyn的回答中所述):

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

但是,在第二种情况下,您必须获取1 st 捕获组的内容,而不是整个匹配(即组#1而不是组#0)。如何操作取决于您正在使用的编程语言。