我有这种类型的文字:
!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
,行为是正常的,但由于它已插入代码中,因此它甚至不会替换其他(当然)正在运行的正则表达式。
答案 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驱动程序中尝试使用它,您将获得更多相关结果。
Adobe宣称其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)。如何操作取决于您正在使用的编程语言。