Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 只从另一个regexp中选择大写字母的regexp_Javascript_Jquery_Regex - Fatal编程技术网

Javascript 只从另一个regexp中选择大写字母的regexp

Javascript 只从另一个regexp中选择大写字母的regexp,javascript,jquery,regex,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 在文本中的任意位置,选择紧跟[CDH]的数字1C、2C、2D、2D 我只想从上面的序列中选择字母,从1C->only C,从2D only D,依此类推。。。。如何使用regexp实现这一点 le:虽然Bolo的方法确实在RegExr中工作,但在Jquery中

我有这种类型的文本:

!D este caro 1 C este descgiderea C1 este alta deschidere Deschiderea de 1C este cu 2C 2D 3 D 1NT 2D 123456P 在文本中的任意位置,选择紧跟[CDH]的数字1C、2C、2D、2D

我只想从上面的序列中选择字母,从1C->only C,从2D only D,依此类推。。。。如何使用regexp实现这一点

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
顺便说一下,原始模式与字母和数字之间有空格的字符串不匹配。您可以使用以下选项允许一个可选空间:

/[0-9]\s*([CDHS])/g
第一种选择:使用:


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

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

/([0-9])([CDHS])/g
…只需将适当编号的组引用插入替换字符串,例如:

"rank=$1, suit=$2"
JavaScript正则表达式不支持lookbehind,所以这种方法不起作用。@Bolo的解决方案在RegExr中工作的原因是因为它是一个Flex应用程序。在类似JavaScript的测试仪中尝试它,您将获得更相关的结果


Adobe宣传其ActionScript正则表达式与JavaScript兼容,并提供了相同的受支持功能列表,但实际上它们的功能要强大得多,因为它由JavaScript提供支持。因此,请注意使用JavaScript测试仪测试JS正则表达式,而不是像RegExr或那样的Flex工具。

您还必须确保选择第一个捕获组,而不是第零个整字符串。@Aillyn-我不希望字母和数字之间有任何空格。英语是由default@andrei我是说编程language@Aillyn,oups,显然:D我试图在replacetext函数中的jquery脚本中使用它,我猜是BBO上的桥:-我认为在这种情况下使用零宽度断言没有多大意义,但如果它起作用。。。我只是好奇为什么第二个选项不起作用。我真的不知道如何只显示第一组而不是整个比赛。实际上,我在jquery脚本replacetext函数中使用这个regexp。使用,/[0-9][CDHS]/g进行测试本身不起作用。如果有人向我解释如何只选择第一个,我会很高兴group@Aillyn我也不喜欢过度使用零宽度断言,但在某些编程语言/环境中处理捕获组可能会更困难。@andrei我从未使用过jquery,但我的第一个猜测是:用\1作为替换字符串。
/[0-9]([CDHS])/g
/([0-9])([CDHS])/g
"rank=$1, suit=$2"