JScript中正則表達函數(shù)的說明與應用
更新時間:2006年06月19日 00:00:00 作者:
作為模式匹配下文本替換、搜索、提取的強有力工具,正則表達式(Regular Expression)的應用已經(jīng)從unix平臺逐漸滲入到網(wǎng)絡開發(fā)中了,作為服務器端/客戶端的腳本開發(fā)語言JScript,正越來越多將正則表達式應用融入其中,以彌補自身在文本上處理能力的不足。在此,我們以JScript5.5版本為例,對其中的正則表達式的應用作一個概述。
首先我們需要區(qū)分JScript中關于正則表達式的兩個對象:Regular Expression對象和RegExp對象。
前者僅包含一個特定的正則表達式實例的信息,而后者通過一個全局變量的屬性來反映最近模式匹配的特性。
前者在匹配前需要指定匹配模式,即創(chuàng)建一個Regular Expression對象的實例,而后可以把它傳遞給一個字符串方法,或是把一個字符串作為參數(shù)傳遞給這個Regular Expression實例的方法;而后者無需創(chuàng)建,它是一個固有的全局對象,每次成功匹配操作結果信息被保存在這個對象的屬性中。
一、RegExp對象的屬性:反應最近一次成功匹配的結果信息
input :保存執(zhí)行匹配的字符串(被搜索的目標字符串)(>=IE4)
index :保存匹配的首字符的位置*>=IE4)
lastIndex :保存匹配的字符串的下一個字符的位置(>=IE4)
lastMatch($&) :保存匹配到的字符串(>=IE5.5)
lastParen($+) :保存匹配結果最后一個子匹配的內(nèi)容(最后一個括號的匹配內(nèi)容)(>=IE5.5)
leftContext($`) :保存目標字符串中匹配子字符串前的所有字符 (>=IE5.5)
rightContext($'):保存目標字符串中匹配子字符串后的所有字符 (>=IE5.5)
$1 - $9 :保存匹配中最開始的9個子匹配(即最開始的9個括號內(nèi)的匹配結果)(>=IE4)
二、Regular Expression對象簡介
1.Regular Expression對象定義
在腳本中使用正則表達式模式匹配,首先腰設定匹配模式,方法有如下兩種
(1)rgExp=/pattern*/[flags*]
(2)rgExp=new RegExp("pattern",["flags"])
注意:
a.后者模式中的轉(zhuǎn)義字符“\”需要用“\\”表示,用以抵消JS中轉(zhuǎn)義字符"\"的意義,否則JS首先作為自己的轉(zhuǎn)義概念來解釋"\"后的字符。
b.flags標識有以下幾個(至JScript 5.5版本)
g:設定當前匹配為全局模式
i:忽略匹配中的大小寫檢測
m:多行搜索模式
2.Regular Expression對象屬性
(1)rgExp.lastIndex:匹配結果后面一個字符的位置,同RegExp.lastIndex
(2)rgExp.source:reExp對象的正則表達式匹配模式
3.Regular Expression對象方法
(1)rgExp.compile(pattern,[flags])
將rgExp轉(zhuǎn)化為內(nèi)部格式,以加快匹配的執(zhí)行,這對于大量模式一致的匹配更有效
(2)rgExp.exec(str)
按照rgExp的匹配模式對str字符串進行匹配查找,當rgExp對象中設定了全局搜索模式(g),則匹配查找從RegExp對象lastIndex屬性所指定的目標字符串位置開始;若沒有設置全局搜索,則從目標字符串第一個字符開始搜索。若沒有任何匹配發(fā)生,返回null。
需要注意的是該方法將匹配結果放在一個數(shù)組內(nèi)返回,該數(shù)組有三個屬性
input:包含目標字符串,同RegExp.index
index:匹配到的子字符串在目標字符串中的位置,同RegExp.index
lastIndex:匹配到的子字符串后面一個字符的位置,同RegExp.lastIndex
(3)rgExp.test(str)
返回布爾值來反映被查找的目標字符串str中是否存在符合匹配的模式。該方法不改變RegExp的屬性
4.與正則表達式相關的方法
主要是指字符串對象中應用模式匹配的方法
(1)stringObj.match(rgExp)
根據(jù)rgExp對象的正則表達式模式查找字符串stringObj中的匹配字符項,將結果以數(shù)組形式返回。該數(shù)組有三個屬性值,與exec方法返回的數(shù)組屬性相同。若沒有任何匹配,返回null。
需要注意的是,若rgExp對象未設定全局匹配模式,則數(shù)組0下標元素為匹配的整體內(nèi)容,1~9包含了子匹配得到的字符。若設定了全局模式,則數(shù)組包含了搜索到的所有整體匹配項。
(2)stringObj.replace(rgExp, replaceText)
返回一個字符串,即將stringObj中符合rgExp模式匹配的字符串替換成replaceText后返回。需要注意的是stringObj本身并不因為替換操作而改變。若期望stringObj中所有符合正則表達式模式的字符串被替換,則在建立正則表達式模式時要設定為全局模式。
(3)stringObj.search(rgExp)
返回第一個匹配到的子字符串的位置
符號名詞解釋:
位置:表示子字符串與目標字符串首字符的偏移
reExp:表示一個Regular Expression對象實例
stringObj:表示一個字符串對象
pattern:正則表達式模式
flags:匹配操作的模式標識
在實際web程序開發(fā)中我們可以有針對性的使用正則表達式來達到我們字符串處理的要求
如下附上四個使用正則表達式的JScript例程,這些例子主要用來熟悉正則表達式的使用。
1.email地址有效性檢測
<script language='JScript'>
function validateEmail(emailStr)
{
var re=/^[\w.-]+@([0-9a-z][\w-]+\.)+[a-z]{2,3}$/i;
//或 var re=new RegExp("^[\\w.-]+@([0-9a-z][\\w-]+\\.)+[a-z]{2,3}$","i");
if(re.test(emailStr))
{
alert("有效email地址!");
return true;
}
else
{
alert("無效email地址!");
return false;
}
}
</script>
2.字符串替換操作
<script language='JScript'>
var r, pattern, re;
var s = "The rain in Spain falls mainly in the plain falls.";
pattern = /falls/ig;
re = s.replace(re,'falling');
alert('s = ' + s + '\n' + 're = ' + re);
</script>
3.模式查找字符串
<script language='JScript'>
var index, pattern;
var str = "four for fall fell fallen fallsing fall falls waterfalls ";
pattern = /\bfalls\b/i;
index = str.search(pattern);
alert('The position of match is at ' + index);
</script>
3.正則表達式屬性例程
<script language='JScript'>
function matchAttrib()
{
var s='';
var re = new RegExp("d(b+)(d)","ig");
var str = "cdbBbdbsbdbdz";
while((arr = re.exec(str))!=null)
{
s += "=======================================<br>";
s += "$1 returns: " + RegExp.$1 + "<br>";
s += "$2 returns: " + RegExp.$2 + "<br>";
s += "$3 returns: " + RegExp.$3 + "<br>";
s += "input returns : " + RegExp.input + "<br>";
s += "index returns : " + RegExp.index + "<br>";
s += "lastIndex returns : " + RegExp.lastIndex + "<br>";
s += "lastMatch returns: " + RegExp.lastMatch + "<br>";
s += "leftContext returns: " + RegExp.leftContext + "<br>";
s += "rightContext returns: " + RegExp.rightContext + "<br>";
s += "lastParen returns: " + RegExp.lastParen + "<br>";
s += "arr.index returns: " + arr.index + "<br>";
s += "arr.lastIndex returns: " + arr.lastIndex + "<br>";
s += "arr.input returns: " + arr.input + "<br>";
s += "re.lastIndex returns: " + re.lastIndex + "<br>";
s += "re.source returns: " + re.source + "<br>";
}
return(s); //Return results.
}
document.write(matchAttrib());
</script>
首先我們需要區(qū)分JScript中關于正則表達式的兩個對象:Regular Expression對象和RegExp對象。
前者僅包含一個特定的正則表達式實例的信息,而后者通過一個全局變量的屬性來反映最近模式匹配的特性。
前者在匹配前需要指定匹配模式,即創(chuàng)建一個Regular Expression對象的實例,而后可以把它傳遞給一個字符串方法,或是把一個字符串作為參數(shù)傳遞給這個Regular Expression實例的方法;而后者無需創(chuàng)建,它是一個固有的全局對象,每次成功匹配操作結果信息被保存在這個對象的屬性中。
一、RegExp對象的屬性:反應最近一次成功匹配的結果信息
input :保存執(zhí)行匹配的字符串(被搜索的目標字符串)(>=IE4)
index :保存匹配的首字符的位置*>=IE4)
lastIndex :保存匹配的字符串的下一個字符的位置(>=IE4)
lastMatch($&) :保存匹配到的字符串(>=IE5.5)
lastParen($+) :保存匹配結果最后一個子匹配的內(nèi)容(最后一個括號的匹配內(nèi)容)(>=IE5.5)
leftContext($`) :保存目標字符串中匹配子字符串前的所有字符 (>=IE5.5)
rightContext($'):保存目標字符串中匹配子字符串后的所有字符 (>=IE5.5)
$1 - $9 :保存匹配中最開始的9個子匹配(即最開始的9個括號內(nèi)的匹配結果)(>=IE4)
二、Regular Expression對象簡介
1.Regular Expression對象定義
在腳本中使用正則表達式模式匹配,首先腰設定匹配模式,方法有如下兩種
(1)rgExp=/pattern*/[flags*]
(2)rgExp=new RegExp("pattern",["flags"])
注意:
a.后者模式中的轉(zhuǎn)義字符“\”需要用“\\”表示,用以抵消JS中轉(zhuǎn)義字符"\"的意義,否則JS首先作為自己的轉(zhuǎn)義概念來解釋"\"后的字符。
b.flags標識有以下幾個(至JScript 5.5版本)
g:設定當前匹配為全局模式
i:忽略匹配中的大小寫檢測
m:多行搜索模式
2.Regular Expression對象屬性
(1)rgExp.lastIndex:匹配結果后面一個字符的位置,同RegExp.lastIndex
(2)rgExp.source:reExp對象的正則表達式匹配模式
3.Regular Expression對象方法
(1)rgExp.compile(pattern,[flags])
將rgExp轉(zhuǎn)化為內(nèi)部格式,以加快匹配的執(zhí)行,這對于大量模式一致的匹配更有效
(2)rgExp.exec(str)
按照rgExp的匹配模式對str字符串進行匹配查找,當rgExp對象中設定了全局搜索模式(g),則匹配查找從RegExp對象lastIndex屬性所指定的目標字符串位置開始;若沒有設置全局搜索,則從目標字符串第一個字符開始搜索。若沒有任何匹配發(fā)生,返回null。
需要注意的是該方法將匹配結果放在一個數(shù)組內(nèi)返回,該數(shù)組有三個屬性
input:包含目標字符串,同RegExp.index
index:匹配到的子字符串在目標字符串中的位置,同RegExp.index
lastIndex:匹配到的子字符串后面一個字符的位置,同RegExp.lastIndex
(3)rgExp.test(str)
返回布爾值來反映被查找的目標字符串str中是否存在符合匹配的模式。該方法不改變RegExp的屬性
4.與正則表達式相關的方法
主要是指字符串對象中應用模式匹配的方法
(1)stringObj.match(rgExp)
根據(jù)rgExp對象的正則表達式模式查找字符串stringObj中的匹配字符項,將結果以數(shù)組形式返回。該數(shù)組有三個屬性值,與exec方法返回的數(shù)組屬性相同。若沒有任何匹配,返回null。
需要注意的是,若rgExp對象未設定全局匹配模式,則數(shù)組0下標元素為匹配的整體內(nèi)容,1~9包含了子匹配得到的字符。若設定了全局模式,則數(shù)組包含了搜索到的所有整體匹配項。
(2)stringObj.replace(rgExp, replaceText)
返回一個字符串,即將stringObj中符合rgExp模式匹配的字符串替換成replaceText后返回。需要注意的是stringObj本身并不因為替換操作而改變。若期望stringObj中所有符合正則表達式模式的字符串被替換,則在建立正則表達式模式時要設定為全局模式。
(3)stringObj.search(rgExp)
返回第一個匹配到的子字符串的位置
符號名詞解釋:
位置:表示子字符串與目標字符串首字符的偏移
reExp:表示一個Regular Expression對象實例
stringObj:表示一個字符串對象
pattern:正則表達式模式
flags:匹配操作的模式標識
在實際web程序開發(fā)中我們可以有針對性的使用正則表達式來達到我們字符串處理的要求
如下附上四個使用正則表達式的JScript例程,這些例子主要用來熟悉正則表達式的使用。
1.email地址有效性檢測
<script language='JScript'>
function validateEmail(emailStr)
{
var re=/^[\w.-]+@([0-9a-z][\w-]+\.)+[a-z]{2,3}$/i;
//或 var re=new RegExp("^[\\w.-]+@([0-9a-z][\\w-]+\\.)+[a-z]{2,3}$","i");
if(re.test(emailStr))
{
alert("有效email地址!");
return true;
}
else
{
alert("無效email地址!");
return false;
}
}
</script>
2.字符串替換操作
<script language='JScript'>
var r, pattern, re;
var s = "The rain in Spain falls mainly in the plain falls.";
pattern = /falls/ig;
re = s.replace(re,'falling');
alert('s = ' + s + '\n' + 're = ' + re);
</script>
3.模式查找字符串
<script language='JScript'>
var index, pattern;
var str = "four for fall fell fallen fallsing fall falls waterfalls ";
pattern = /\bfalls\b/i;
index = str.search(pattern);
alert('The position of match is at ' + index);
</script>
3.正則表達式屬性例程
<script language='JScript'>
function matchAttrib()
{
var s='';
var re = new RegExp("d(b+)(d)","ig");
var str = "cdbBbdbsbdbdz";
while((arr = re.exec(str))!=null)
{
s += "=======================================<br>";
s += "$1 returns: " + RegExp.$1 + "<br>";
s += "$2 returns: " + RegExp.$2 + "<br>";
s += "$3 returns: " + RegExp.$3 + "<br>";
s += "input returns : " + RegExp.input + "<br>";
s += "index returns : " + RegExp.index + "<br>";
s += "lastIndex returns : " + RegExp.lastIndex + "<br>";
s += "lastMatch returns: " + RegExp.lastMatch + "<br>";
s += "leftContext returns: " + RegExp.leftContext + "<br>";
s += "rightContext returns: " + RegExp.rightContext + "<br>";
s += "lastParen returns: " + RegExp.lastParen + "<br>";
s += "arr.index returns: " + arr.index + "<br>";
s += "arr.lastIndex returns: " + arr.lastIndex + "<br>";
s += "arr.input returns: " + arr.input + "<br>";
s += "re.lastIndex returns: " + re.lastIndex + "<br>";
s += "re.source returns: " + re.source + "<br>";
}
return(s); //Return results.
}
document.write(matchAttrib());
</script>
相關文章
js處理網(wǎng)頁編輯器轉(zhuǎn)義、去除轉(zhuǎn)義、去除HTML標簽的正則
這篇文章主要介紹了富文本編輯器生成的HTML標簽,進行轉(zhuǎn)義,然后寫入數(shù)據(jù)庫,防止腳本注入,需要的朋友可以參考下2020-02-02