正規表示式種雙反斜槓問題

2022-02-19 07:55:52 字數 2571 閱讀 8623

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 反斜槓之前的數字時,我屢次碰壁,始終得不到結果。最終發現自己理解錯了,原來原始字串和 正則...