jquery:給正則表達式添加變量


http://www.2cto.com/kf/201402/277766.html

正則表達式普通用法:var checkString=/^.*\S+.*$/;  //注意正則表達式沒有引號

checkString.test(帶匹配字符串);

 

 

 

前不久同事詢問我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 = {first : v};  //{first : "bl"}
 
 
但是,如果碰到了用正則字面量,貌似一切就沒這么好了。
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")


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM