最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript 使用正則test( )第一次是 true,第二次是false

 更新時間:2017年02月22日 08:46:29   投稿:lqh  
這篇文章主要介紹了使用正則test( )第一次是 true,第二次是false的相關(guān)資料,需要的朋友可以參考下

1.前言

今天朋友問我一個問題,我現(xiàn)在需要多次匹配同一個內(nèi)容,但是為什么我第一次匹配,直接是 true,而第二次匹配確實 false 呢?

var s1 = "MRLP";
var s2 = "MRLP";
var reg = /mrlp/ig;
console.log(reg.test(s1));
console.log(reg.test(s2));

這時候你會發(fā)現(xiàn),我們在連續(xù)使用一個正則匹配其他字符串的時候,第一次匹配是 true,而第二次匹配則是 false。

等等,WHT?我匹配的是 MRLP,而且我還特意加上i 用于不區(qū)分大小寫,可以為什么第一次可以正常匹配,第二次就不行了呢?

這也就是我今天要跟大家說的,關(guān)于 JS 中的 lastIndex。

2. lastIndex

在開始講解之前,首先先帶大家簡單回顧一下 JS中正則表達式的使用方式。

JS 中正則表達式的使用方式有兩種:

第一種是正則表達式對象的方法,常用方法有兩個。

  • exec(str) : 檢索字符串中指定的值。返回找到的值,并確定其位置
  • test(str) : 檢索字符串中指定的值。返回 true 或 false

第二種是字符串對象的方法,常用方法有四個。

  1. match(regexp) : 找到一個或多個正則表達式的匹配
  2. replace(regexp) : 替換與正則表達式匹配的子串
  3. search(regexp) : 檢索與正則表達式相匹配的值
  4. split(search) : 把字符串分割為字符串?dāng)?shù)組

而這些方法和咱們今天所說的 lastIndex 有什么關(guān)系呢?

lastIndex 屬性用于規(guī)定下次匹配的起始位置。

上次匹配的結(jié)果是由方法 RegExp.exec( ) 和 RegExp.test( ) 找到的,它們都以 lastIndex 屬性所指的位置作為下次檢索的起始點。

這樣,就可以通過反復(fù)調(diào)用這兩個方法來遍歷一個字符串中的所有匹配文本。

而且需要注意,該屬性只有設(shè)置標(biāo)志 g才能使用。

既然已經(jīng)知道這個東西的形成原因,那么解決起來就非常簡單了。

3.解決方案

3.1 第一種解決方案

如上面所述,我們 lastIndex 屬性必須要設(shè)置 g 標(biāo)簽才能使用。

那么我們在匹配的時候,可以根據(jù)情況,直接去掉 g 標(biāo)簽就可以啦。

var s1 = "MRLP";
var s2 = "MRLP";
var reg = /mrlp/i;
console.log(reg.test(s1)); //true
console.log(reg.test(s2)); //true

3.2 第二種解決方案

很多時候,我們必須要執(zhí)行 全局匹配( g ),這時候就不能使用第一種方案了。

其實,我們的lastIndex 屬性是可讀可寫的。

只要目標(biāo)字符串的下一次搜索開始,就可以對它進行設(shè)置。

當(dāng)方法 exec() 或 test() 再也找不到可以匹配的文本時,它們會自動把 lastIndex 屬性重置為 0。

這樣,我們再次執(zhí)行全局匹配的時候,就不會出現(xiàn) false 的情況了。

var s1 = "3206064928:MRLP:3206064928";
var s2 = "MRLP";
var reg = /mrlp/ig;
console.log(reg.test(s1)); //true
console.log(reg.lastIndex);  //reg.lastIndex = 15
reg.lastIndex = 0;     //這里我將 lastIndex 重置為 0
console.log(reg.test(s2)); //true

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • 關(guān)于Javascript中document.cookie的使用

    關(guān)于Javascript中document.cookie的使用

    這篇文章主要介紹了關(guān)于Javascript中document.cookie的使用,通過cookie來記住密碼保存密碼功能,需要的朋友可以參考下
    2017-03-03
  • JS+CSS實現(xiàn)電子商務(wù)網(wǎng)站導(dǎo)航模板效果代碼

    JS+CSS實現(xiàn)電子商務(wù)網(wǎng)站導(dǎo)航模板效果代碼

    這篇文章主要介紹了JS+CSS實現(xiàn)電子商務(wù)網(wǎng)站導(dǎo)航模板效果代碼,涉及JavaScript結(jié)合css動態(tài)操作頁面元素屬性的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-09-09
  • 淺述Javascript的外部對象

    淺述Javascript的外部對象

    本文主要對Javascript的外部對象進行介紹,列舉了具體實例。便于理解。有需要的朋友可以看下
    2016-12-12
  • Echarts自定義地圖和添加圖標(biāo)代碼示例

    Echarts自定義地圖和添加圖標(biāo)代碼示例

    這篇文章主要給大家介紹了關(guān)于Echarts自定義地圖和添加圖標(biāo)的相關(guān)資料,項目中經(jīng)常會遇到需要渲染echarts地圖的情況,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-09-09
  • Uniapp?實現(xiàn)全民分銷功能原理解析

    Uniapp?實現(xiàn)全民分銷功能原理解析

    這篇文章主要介紹了Uniapp?實現(xiàn)全民分銷功能,本篇文章主要介紹全民分銷功能實現(xiàn)原理,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • 開發(fā)跨瀏覽器的JavaScript方法說明

    開發(fā)跨瀏覽器的JavaScript方法說明

    IE是當(dāng)前瀏覽器的一個異類,不過解決方法倒也相當(dāng)簡單,使用Firefox和Safari 之 類的瀏覽時,可以使用元素的setArribute方法來設(shè)置元素的class屬性
    2008-08-08
  • 如何更好的編寫js async函數(shù)

    如何更好的編寫js async函數(shù)

    本文給大家談一下如何優(yōu)化async代碼,更充分的利用異步事件流杜絕濫用async,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • 微信小程序抽獎組件的使用步驟

    微信小程序抽獎組件的使用步驟

    這篇文章主要給大家介紹了關(guān)于微信小程序抽獎組件的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 微信小程序-圖片、錄音、音頻播放、音樂播放、視頻、文件代碼實例

    微信小程序-圖片、錄音、音頻播放、音樂播放、視頻、文件代碼實例

    本篇文章主要介紹了微信小程序-圖片、錄音、音頻播放、音樂播放、視屏、文件代碼實例,有興趣的可以了解一下。
    2016-11-11
  • JS 面向?qū)ο笾衿娴膒rototype

    JS 面向?qū)ο笾衿娴膒rototype

    對于初學(xué) JavaScript 的人來說 prototype 是一種很神奇的特性,而事實上,prototype 對于 JavaScript 的意義重大,prototype 不僅僅是一種管理對象繼承的機制,更是一種出色的設(shè)計思想。
    2011-02-02

最新評論

两当县| 太和县| 房山区| 济阳县| 仙游县| 淄博市| 泰顺县| 汝州市| 闽清县| 宜阳县| 邵阳市| 密云县| 琼海市| 福泉市| 苍南县| 萨迦县| 九龙坡区| 宜州市| 江西省| 兰州市| 肇源县| 井陉县| 将乐县| 民勤县| 孟连| 昭觉县| 句容市| 连江县| 彭州市| 河间市| 上犹县| 崇礼县| 兰州市| 天水市| 凤城市| 南宁市| 班戈县| 包头市| 招远市| 横山县| 子洲县|