求一個正則表達式,要求左邊若干數字,中間間隔號-,右邊若干數字,左右數字總個數不超過20。希望能直接用,不用其它函數進行計算。
?<=和?=和?:這三種各是什么意思 ,請講解一下。
你的答案很精辟,謝謝。
給你寫了一段示例,用javascript寫的,你說的左右數字總個數不超過20,加上“-”即字符串總長度不超過21。如下:
- <script type="text/javascript">
- var str = '111-3763232';
- var reg = /^(?=.{3,21}$)/d+-/d+$/;
- alert(reg.test(str));
- </script>
測試后能滿足你的要求。
你想問的應該是以下四個環視結構。它們不匹配任何具體的字符,只匹配一個位置,就像“^”和“$”匹配字符串的起始和結束位置。
(?=...) 正向肯定環視。其中“...”是一個正則表達式,表示在當前位置的右邊的字符必須被“...”所匹配。
(?!...) 正向否定環視。表示當前位置右邊的內容必須不能被“...”所匹配。
(?<=...)和(?<!...)分別是反向肯定環視和反向否定環視,只不過方向是左邊。
至于(?:),它與普通的括號()功能相同,區別是它不會將子匹配儲存起來。某些情況下使用(?:)能提高正則表達式的效率。
再來說說表達式“/^(?=.{3,21}$)/d+-/d+$/”:
^(?=.{3,21}$) 規定了從字符串的起始位置開始,后面有3-21個任意字符,接著就是字符串的結束了。
/d+-/d+$ 這個是你的題目要求,沒什么好說的了吧。
新聞熱點
疑難解答