2012-04-24 37 views
2

我怎麼能寫出符合這個正則表達式 - 其次

123/456 

123/456/? 

但不是這個

123/456/ 

我要上第二/它必須遵循的一個是正則表達式?

例如,我想它匹配這個

'123/456'.match(X) // return ['123/456'] 
'123/456/?'.match(X) // return ['123/456/?'] 
'123/456/'.match(X) // return null 

更新

我錯過了說一件重要的事情。它必須不是結束,就像一個字符串「四百五十六分之一百二十三/喜?」也應該與

+1

數字是否可以不同於123和456?如果是的話,他們可以多久? – sp00m 2012-04-24 07:19:37

+0

@ sp00m,是的,它可以是任何數字 – Codler 2012-04-24 07:20:52

回答

2

你可以試試這個正則表達式「?」:\d{3}/\d{3}(/\?.*)?

它將匹配

  • 3位數
  • 後跟一個/
  • 後跟3個數字
  • 接着/?any_text(例如/?hi)(可選)

This example使用正則表達式錨狀^$,但如果你只是試圖匹配目標字符串它們不是必需的。

var result = '123/456/?hi'.match(/\d{3}\/\d{3}(\/\?.*)?/); 
if (result) { 
    document.write(result[0]); 
} 
else { 
    document.write('no match'); 
} 
+0

也許你可以用+和你的''替換你的'{3}'。*'用'[^] *' – sp00m 2012-04-24 07:25:19

+0

@ sp00m OP仍然沒有說出是否可以有任意數量的數字。 – splash 2012-04-24 07:27:11

+0

當我嘗試'123/456 /?hi'.match(/ \ d {3}/\ d {3}(/ ??.*)?/)'時,出現錯誤' – Codler 2012-04-24 07:28:43

3

這個正則表達式將工作/^\d{3}\/\d{3}(\/\?.*)?/

看到這個JSFiddle

注意:如果您認爲它應該匹配任意數量的數字,則使用\d+而不是\d{3}。後者恰好匹配3位數字。

+0

我錯過了說一件重要的事情。它不能以'?'結尾,像「123/456 /?hi」這樣的字符串也應該匹配。 – Codler 2012-04-24 07:17:12

+0

aha。然後更新你的問題。我也更新了答案。 – 2012-04-24 07:21:00

0

你有什麼其他規則?

如果要接受比?其他最後一個字符的所有字符串,使用"[^?]$"

如果你想接受與123/456開始和任選/?結尾的字符串,使用"^123/456(/\?)?$"

+0

我錯過了說一件重要的事情。它不能以'?'結尾,像「123/456 /?hi」這樣的字符串也應該匹配。 – Codler 2012-04-24 07:11:15

+0

然後使用第一個表達式。 – Joni 2012-04-24 07:14:09

0

我認爲這應該工作:

'123/456'.match(/^123\/456(\/\?)?$/) // returns ["123/456", undefined] 
'123/456/'.match(/^123\/456(\/\?)?$/) // returns null 
'123/456/?'.match(/^123\/456(\/\?)?$/) // returns ["123/456/?", "/?"] 

編輯:添加的其他情況下

1

您在這裏:

[0-9]+/[0-9]+(/\?[^ ]*)?