前不久同事詢問我js裡面怎麼給正則中新增變數的問題,遂寫篇部落格記錄下。
一、字面量
其實當我們定義乙個字串,乙個陣列,乙個物件等等的時候,我們習慣用字面量來定義,例如:
var s = "string";var a = [1,2];
var o = {};
如果需要加入變數,那也是十分簡單的事情,比如:
var v = "bl";var s = "string" + v; //
"stringbl"
var a = [1,v]; //
[1,"bl"]
var o = ; //
但是,如果碰到了用正則字面量,貌似一切就沒這麼好了。
var v = "bl";var re = /^\d+$/gim;
這時,假如你想給\d+後面加入v這個變數,你會發現,沒法弄。因為無論你怎麼寫,都會被當作正則的一部分來處理。
二、建構函式
在js的世界中。除了null,undefined。其餘皆是物件。
不過,這裡肯定有人說,string、number、boolean怎麼會是物件呢。
其實雖然我上面那句話不準確,但確實是最直觀的感受。因為string、number、boolean在你用的時候,會預設的被相應的基本包裝型別給轉換成物件。
然後我們又知道,在js中,所有的物件都是通過建構函式來生成的。
那麼,我們就可以用建構函式來代替字面量定義法,例如:
var s = new string("string"); //string物件,tostring()後為"string"
var a = new array(1,2); //
[1,2]
var o = new object(); //
{}
相應的,我們也可以用建構函式來生成正規表示式
var re = new regexp("^\\d+$","gim"); //注意,反斜槓需要轉義
那麼,給它加變數,就和我們前面寫的給字串加變數一樣了。
var v = "bl";var re =new regexp("^\\d+" + v + "$","gim"); //
re為/^\d+bl$/gim
至此,最初的問題問題也完全解決了。
另外,還有一種方法是用過eval動態執行一段字串的方法,不過我覺得從各方面來說,都屬下策。
var re = eval("/^\\d+" + v + "$/gim")
js數字正規表示式,js小數正規表示式
js數字正規表示式,js小數正規表示式 是否為數字 僅正數 包括正整數 正小數 0 param value returns function isnumber value 是否為所有數字 正數 負數 包括整數 小數 0 param value returns function isnumberall...
JS 正規表示式
驗證數字的正規表示式集 驗證數字 0 9 驗證n位的數字 d 驗證至少n位數字 d 驗證m n位的數字 d 驗證零和非零開頭的數字 0 1 9 0 9 驗證有兩位小數的正實數 0 9 0 9 驗證有1 3位小數的正實數 0 9 0 9 驗證非零的正整數 1 9 0 9 驗證非零的負整數 1 9 0 ...
js正規表示式
用正規表示式模式在字串中執行查詢,並返回包含該查詢結果的乙個陣列。rgexp.exec str 引數rgexp 必選項。包含正規表示式模式和可用標誌的正規表示式物件。str 必選項。要在其中執行查詢的string物件或字串文字。說明如果exec方法沒有找到匹配,則它返回null。如果它找到匹配,則e...