日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

JS编程建议——42:用好正则表达式静态值

發(fā)布時(shí)間:2025/3/21 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS编程建议——42:用好正则表达式静态值 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

建議42:用好正則表達(dá)式靜態(tài)值
正則表達(dá)式的靜態(tài)屬性比較特殊,有兩個(gè)名字:長(zhǎng)名(全稱)和短名(簡(jiǎn)稱,以美元符號(hào)開頭表示),詳細(xì)說明見表2.1。
表2.1 RegExp的靜態(tài)屬性
長(zhǎng)名 短名 說明
input $_ 最后用于匹配的字符串,即傳遞給exec()或test()方法的字符串
lastMatch $& 最后匹配的字符
lastParen $+ 最后匹配的分組
leftContext $` 在上次匹配之前的子字符串
multiline $* 用于指定是否所有表達(dá)式都使用多行模式的布爾值
rightContext $' 在上次匹配之后的子字符串
在下面的這個(gè)示例中借助正則表達(dá)式的靜態(tài)屬性,匹配字符串“Javascript”,不區(qū)分大小寫:
var s = "Javascript,not Javascript";
var r = /(Java)Script/gi;
var a = r.exec(s);
alert(RegExp.input); //"Javascript,not Javascript"
alert(RegExp.leftContext); //空字符串,因?yàn)樵诘谝淮纹ヅ洳僮鲿r(shí),左側(cè)沒有內(nèi)容
alert(RegExp.rightContext); //",not Javascript"
alert(RegExp.lastMatch); //"Javascript "
alert(RegExp.lastParen); //"Java"
上面示例演示了正則表達(dá)式的幾個(gè)靜態(tài)屬性的用法。
input屬性實(shí)際上存儲(chǔ)的是被執(zhí)行匹配的字符串,即整個(gè)字符串“Javascript,not Javascript”。
leftContext屬性存儲(chǔ)的是執(zhí)行第一次匹配之前的子字符串,這里為空,因?yàn)樵诘谝淮纹ヅ鋾r(shí)文本“Javascript”左側(cè)為空,而rightContext屬性存儲(chǔ)的是執(zhí)行第一次匹配之后的子字符串,即為“,not Javascript”。
lastMatch屬性包含的是第一次匹配的子字符串,即為“Javascript”。
lastParen屬性包含的是第一次匹配的分組,即為“Java”。如果模式中包含多個(gè)分組,則會(huì)顯示最后一個(gè)分組所匹配的字符。例如:
var r = /(Java)(Script)/gi;
var a = r.exec(s); //執(zhí)行匹配操作
alert(RegExp.lastParen); //返回"Script",而不再是"Java"
也可以使用短名來讀取這些屬性所包含的值,考慮到這些短名不符合JavaScript語法規(guī)范,因此必須使用中括號(hào)運(yùn)算符來進(jìn)行讀取操作。不過對(duì)于$_屬性來說,由于它符合JavaScript標(biāo)識(shí)符語法規(guī)范,因此可以直接使用。例如,針對(duì)上面示例也可以這樣設(shè)計(jì):
var s = "Javascript,not Javascript";
var r = /(Java)(Script)/gi;
var a = r.exec(s);
alert(RegExp.$_); //"Javascript,not Javascript"
alert(RegExp["$`"]); //空字符串
alert(RegExp["$'"]); //",not Javascript"
alert(RegExp["$&"]); //"Javascript "
alert(RegExp["$+"]); //"Java"
這些屬性的值都是動(dòng)態(tài)的,每次執(zhí)行exec()或test()方法時(shí),所有屬性值都會(huì)被重新設(shè)置。當(dāng)在下面示例中執(zhí)行第一次匹配和第二次匹配時(shí),這些靜態(tài)屬性值都會(huì)實(shí)時(shí)動(dòng)態(tài)更新。
var s = "Javascript,not Javascript";
var r = /Scrip(t)/gi; // 第一次定義的匹配模式
var a = r.exec(s); // 執(zhí)行第一次匹配
alert(RegExp.$_); //"Javascript,not Javascript"
alert(RegExp["$`"]); //"Java"
alert(RegExp["$'"]); //",not Javascript"
alert(RegExp["$&"]); //"Script"
alert(RegExp["$+"]); //"t"
var r = /Jav(a)/gi; // 第二次定義的匹配模式
var a = r.exec(s); // 執(zhí)行第二次匹配
alert(RegExp.$_); //"Javascript,not Javascript"
alert(RegExp["$`"]); //空字符串
alert(RegExp["$'"]); //"Script,not Javascript"
alert(RegExp["$&"]); //"Java"
alert(RegExp["$+"]); //"a"
通過上面的示例可以看出,RegExp對(duì)象的靜態(tài)屬性是公共的,對(duì)于所有正則表達(dá)式來說是可以共享的,因此這些靜態(tài)屬性的值也是實(shí)時(shí)變化的。
multiline屬性與上面幾個(gè)屬性不同,它不會(huì)根據(jù)每次執(zhí)行的操作進(jìn)行實(shí)時(shí)更新,并且還可以控制所有正則表達(dá)式的m標(biāo)志項(xiàng)。例如:
var s = "anbnc";
var r = /w+$/g; // 定義匹配模式
var a = s.match(r); // 執(zhí)行默認(rèn)匹配,返回?cái)?shù)組["c"]
RegExp.multiline = true; // 動(dòng)態(tài)設(shè)置模式為多行匹配
var a = s.match(r); //["a", "b", "c"]
提示:IE和Opera瀏覽器不支持RegExp.multiline屬性,考慮到瀏覽器的兼容性,不建議讀者使用這種動(dòng)態(tài)方式設(shè)置正則表達(dá)式的多行匹配模式。

總結(jié)

以上是生活随笔為你收集整理的JS编程建议——42:用好正则表达式静态值的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。