2010-06-15 19 views
1

我有這樣的代碼:正則表達式:搜索字符還不夠完善

<script type="text/javascript"> 
var str="KD-R35H2UND"; 
var patt1=/[G|T|EE|EJU].*D/i; 
document.write(str.match(patt1)); 
</script> 

通過使用代碼在var patt1=...我可以表明這樣的:

if i type KD-R35ED => SHOW ED 
KD-R35UND => UND 
KD-R35JD => JD 
KD-R35TJD => TJD 
KD-R35EED=> EED 

我的問題是:如果我輸入KD-R35GD它可以顯示GD,但如果KD-R35D它不能顯示任何內容..如何使其工作?

+1

什麼是你想用正則表達式做的事情 - 尤其是這部分'[EE | EJU]' - 闡述了輸入的格式和匹配標準,並張貼了幾個接受和拒絕字符串。 – Amarghosh 2010-06-15 10:14:44

+1

@klox:該輸出非常適合什麼模式應該做的事。顯然,這是不是你想要的,所以你需要明確地告訴正則表達式引擎,你想要什麼。如果你不能做到這一點,那麼你需要清楚地告訴我們你想要什麼,所以我們可以告訴你怎樣去說服發動機你顯然希望。而這顯然我想要的。 – polygenelubricants 2010-06-15 11:11:20

+1

計算器:問題還不夠完善 – 2010-06-15 11:46:09

回答

2

b*表示「匹配零或多個b」。

.表示「匹配除換行符以外的任何字符」。

[EE|EJU]表示「匹配E,|,JU」。

.*表示「匹配除換行零次或更多次以外的任何字符」。

D表示「匹配D」。

所以正則表達式正在做你要求它做的事情。

從你在你的問題中提供的例子,我猜,實際規則應該是:

  1. 字符串KD-R35開始。
  2. 然後任意數目的字母數字字符可以遵循,只要
  3. 存在E,一個J或其中一個U,和
  4. 字符串中D結束。

這些規則,作爲一個正則表達式,請閱讀:

^   # start of string 
KD-R35 # literal text 
(  # start of capturing group 
    \w*  # any number of alphanumeric characters 
    [EJU] # at least one of E, J, or U 
    \w*  # any number of alphanumeric characters 
    D  # a D 
)   # end of capturing group 
$   # end of string 

,或者在JavaScript:

match = subject.match(/^KD-R35(\w*[EJU]\w*D)$/i); 
if (match != null) { // successful match 
    mytext = match[1] // capturing group 1 
} else { 
    // Match attempt failed 
} 

我假設大/小寫並不重要。

編輯:嗯,你的新編輯更改規則。似乎任何字符串都是允許的,只要它以KD-R35開頭並以D結束。在這種情況下,正則表達式只是/^KD-R35(\w*D)$/i

+0

看看我編輯的問題 – klox 2010-06-16 01:34:41

+0

這似乎是一個相同的problem..always顯示KD-35H2UND,H2UND – klox 2010-06-16 06:35:15

+0

我不明白。 '匹配[0]'包含整個字符串( 「KD-R35H2UND」),'匹配[1]'包含變量部分( 「H2UND」)。這是不可能的,如果它的前面by' KD-R35',因爲JavaScript不支持向後斷言只匹配'H2UND'。 – 2010-06-16 07:22:35

0

字符串(KD-R35)的第一部分是否與要驗證的字符串的所有實例相同(或至少是格式)?

你可以在正則表達式匹配後編寫一個字符串示例列表和你想要的提取。

例如:

  • KD-R35HASDF => HASDF
  • KD-R35H1234 => H1234
  • KD-R35HASDA => HASDA
  • KD-R35HG54G => HG54G
  • KD -R35HD23D => HD23D

如果是這樣的情況下,這個表達式可能有幫助:

. {2} \ - {3}

意義。(*):

  1. 任何字符2倍
  2. 減號
  3. 任何字符的3倍
  4. CAPTURE - 任意字符任意次數

HTML:

<script type="text/javascript"> 
     var str1="KD-R35HASDF"; 
     var str2="KD-R35H1234"; 
     var str3="KD-R35HASDA"; 
     var str4="KD-R35HG54G"; 
     var str5="KD-R35HD23D"; 
     var patt1=/.{2}\-.{3}(.*)/; 
     document.write(str1.match(patt1)[1] + "<br>"); 
     document.write(str2.match(patt1)[1] + "<br>"); 
     document.write(str3.match(patt1)[1] + "<br>"); 
     document.write(str4.match(patt1)[1] + "<br>"); 
     document.write(str5.match(patt1)[1] + "<br>"); 
    </script> 

並注意str5.match(patt1)返回一個數組,所以使用這樣的第二個元素:

str5.match(patt1)[1]

,你會得到你正在尋找

+0

看看我編輯的問題 – klox 2010-06-16 01:35:19

+0

應該是'{2} - { 3}(。*)',他想要的一切了'KD-R35'後,它似乎。 – beggs 2010-06-16 02:13:39

+0

沒有顯示KD-R35H2UND,H2UND ... – klox 2010-06-16 03:44:04

0
<script type="text/javascript"> 
var str="KD-R35H2UND"; 
var patt1=/.{2}-.{3}(.*)/; 
document.write(str.match(patt1)); 
</script> 
結果210

我改變這一個,但顯示KD-R35H2UND,H2UND