2010-08-10 161 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