2014-02-18 69 views
0

我需要匹配在單引號或百分比可能會出現一個字符串只有一次正則表達式前瞻中的JavaScript

的發生是這樣

首字母不應該是這兩個特殊字符 只能出現一次

Example 

Valid Cases 
Test' 
Te'st 
Test% 
Te%st 

Invalid Cases 
%Test 
'Test 
Test%' 
Test%% 

我使用這種方式現在

/^[a-z ]*(?:[a-z]'|%)?[ a-z]+$/i.test("Tes%t") 

但在此我無法匹配測試%或測試'我在這裏做錯了什麼?

有人能幫

+0

結束這兩種情況返回「真」給我。 – simonzack

+0

@simonzack:對於這個/^[a-z] *(?:[a-z]'|%)?[a-z] + $/i.test(「Test%」)我得到了錯誤。我正在測試開發者控制檯谷歌瀏覽器版本29 – karthick

回答

1

/^[a-z ]*(?:[a-z]'|%)?[ a-z]+$/i.test("Tes%")預計有[ a-z]一次或多次,因爲它後面+。如果你用*代替它,它似乎工作正常。還需要將[a-z ]*替換爲[a-z ]+以便禁止以兩個字符之一開頭的單詞的情況,例如您提到的無效案例%Test

例, /^[a-z ]+(?:[a-z]'|%)?[ a-z]*$/i.test("Tes%")

scriptular

+0

感謝它的工作。 – karthick

+0

你能解釋一下這個部分嗎?我無法理解這個「[a-z]」一次或多次,因爲它後面跟着+「 – karthick

+0

再次感謝您的解釋。 – karthick

1

這裏有一個工作的另一種模式:/^[^'%]+['%][^'%]*$/

  • ^從行的開頭
  • [^'%]+匹配一個或多個字符是不是首發a'或%
  • ['%]之後的一個字符,這是一個「或%
  • [^'%]*$並允許零個或多個字符不屬於」或%,直到