var re1 = /\d+\.\d+/;alert(re1);
//結果是 /\d+\.\d+/ 和宣告的正則re1一樣
/*這裡的
n(n>0)個數字 符號點 n(n>0)個數字
既:9.9、12.134、56362.151415 等
*/var str1 = '134.32';
alert(re1.test(str1));
//true
/*接下來
我們根據感覺改成用new regexp宣告正則*/
var re2 = new regexp('\d+\.\d+');alert(re2);
//結果 /d+.d+/
//根據我們彈出的 正規表示式/d+.d+/分析
/*可見輸出的結果並不是我們想要的正規表示式,這個表示式的意思:
d+表示 n(n>0)個d
.表示匹配除換行符意外的任意字元
後邊d+表示 n(n>0)個d。
既 d.d 、dd.dd 、dad、ddydd 等
*/
var str2 = 'ddyd';alert(re2.test(str2));
//true
那麼 問題出在了**,我們來分析一下,我們都知道正規表示式它本質上
也是乙個字串,但是功能比一般的字串要強很多,所以可以稱作是
超級字串。我們在用new regexp('正則')宣告正規表示式的時候,
可以看出是用引號包著的,我們都知道在js裡,' '引號可以用來宣告
字串(/ / 用來宣告正則)。所以這裡更可以看出是正規表示式也
是字串了。
而在字串裡 反斜槓\是有特殊含義的,就是用來轉移字元。
所以我們我們上面寫的new regexp('\d+\.\d+');就有問題了。
本來我們是想用\d表示匹配任意的數字的。配合元字元+後有n(n>0)
個數字的。
因為反斜槓\有轉義的意思所上面的
\d 被轉義成了d
\. 被轉義成了. (.點在正則中表示匹配除換行符以外的
任意字元)
所以被引號包著的正規表示式字串'\d+\.\d+'被轉換成真正
的正規表示式之後就成了/d+.d+/
所以就有了上面描述的現象。
/*既然如此我們只要合理的利用轉義字元反斜槓\,就可以使用
new regexp('')宣告的正則和直接用 / / 宣告的正則達到一樣的效
果。思路:
1.確定我們想要的正規表示式:/\d+\.\d+/
【注】兩邊的斜槓 / 是用來宣告正則的,裡面的內容\d+\.\d+是
表示式的式子,式子和 斜槓/合起來才叫正規表示式
2.把正規表示式的式子放到引號(字串)裡'\d+\.\d+',很明顯這樣是不
行的,裡面的反斜槓\被當成了用來轉義標識,所以我們要把 再加乙個
\,即:'\\d+\\.\\d+'這樣第乙個反斜槓\就把第二個反斜槓\轉成了反斜槓\
這樣這個字串''正則,轉換成斜槓/ / 正則的時候就成了我們想要的/ \d+\.\d+/了。
*///下面我們進行測試一下
var re3 = new regexp('\\d+\\.\\d+');alert(re3);
//結果 /\d+\.\d+/
var str3 = '32.1';
alert (re3.test(str3));
//true
/*可以看出現在達到裡我們向要的效果,從alert(re3);得到的結果/\d+\.\d+/就可以看出沒錯了。
轉義標識反斜槓\在通過new regexp('\\d+\\.\\d+')宣告的正則和 / /宣告的正則中都內轉義,
在/\d+\.\d+/這裡邊為什麼沒有把\d轉成d?
因為/\d+\.\d+/這種形式就是正規表示式的形式,而在正規表示式裡有明文規定\d這種寫法代
表的意思,所以在執行正規表示式的時候遇到反斜槓\後,一看後面還有個d自然就不轉義。(\d這
種具有特殊含義的字元叫做元字元)。
但是通過new regexp 加字串'';宣告的,因為這些有特殊含義的字元在字串裡他們並不認為
有特殊含義。所以要多加乙個\,這樣等轉換成斜槓/ /方式的時候還有乙個反斜槓\.*/
/*在這裡我們再附加乙個小例子
用new的方式宣告正規表示式。可以匹配字串hello,e和l之間有n(n>0)個+號;
*/
var re4 = new regexp('he\\++llo');/*第乙個\是轉義標識負責把第二\轉換成符號\
然而在/he\++llo/裡\又成了乙個轉義標識,他把後面的+從正規表示式的重複字元變成了
純符號+,緊隨其後的+因為沒有轉義,所以它是正則的重複字元,多以他代表有n(n>0)個
前面的符號+
*/alert(re4);
//結果 /he\++llo/
var str4 = 'he+++++llo';
alert(re4.test(str4));
//true
正規表示式反斜槓匹配問題
今天pcat大神出了個正規表示式的題,s n r 問這個能匹配什麼字串。在idle上面跑的出來。在pycharm上就跑不出來。最開始以為是沒有用檔案寫的問題,後面用了檔案也沒有跑出來。並且到現在還不知道原因。嘗試匹配的字串是 00 00 r 匹配的結果是 00 r 其中 r匹配到回車是 表示程式設計...
雙反斜槓引發的正規表示式錯誤
今天寫js所填資料的校驗時,遇到了以下的錯誤。特此記錄 uncaught syntaxerror invalid regular expression d d nothing to repeat 原始碼 var reg new regexp d d 查德一看,好像沒有什麼錯誤。但是細心就會發現。丟擲...
Python正規表示式匹配反斜槓「 」
在學習python正則式的過程中,有乙個問題一直困擾我,如何去匹配乙個反斜槓 即 在學習了python特殊字元和原始字串之後,我覺得答案應該是這樣的 1 普通字串 2 原始字串 r 但事實上在提取諸如 3 8 反斜槓之前的數字時,我屢次碰壁,始終得不到結果。最終發現自己理解錯了,原來原始字串和 正則...