亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JS中with的替代方法與String中的正則方法詳解

 更新時(shí)間:2016年12月23日 10:21:35   作者:小精靈兒  
最近這幾天在升級(jí)自己的MVVM 框架,遇到很多小問題,所以想著就在這里統(tǒng)一解決了。文中主要介紹了關(guān)于Javascript中with的替代方法與String中的正則方法,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。

with 語(yǔ)法

在代碼中,要執(zhí)行這么一個(gè)函數(shù)

 function computeExpression(exp, scope) {
 try {
  with (scope) {
   return eval(exp);
  }
 } catch (e) {
  console.error('ERROR', e);
 }
}

要求在scope 作用域中執(zhí)行,什么意思???

比如

scope = {a:10,b:5};
exp = a*b;

要求計(jì)算結(jié)果為15,這種情況,常規(guī)情況下要使用 with語(yǔ)法。

但是:

js的解釋器需要檢查with塊中的變量是否屬于with包含的對(duì)象,這將使with語(yǔ)句執(zhí)行速度大大下降,并且導(dǎo)致js語(yǔ)句很難被優(yōu)化。

在嚴(yán)格模式中,with語(yǔ)法是被禁用的。

而我使用ES6語(yǔ)法來(lái)編寫這個(gè)庫(kù)的,默認(rèn)啟用了嚴(yán)格模式了。所以不得已,自己模擬了一個(gè)with 的語(yǔ)法。

先看代碼

function replaceWith(scopeName, exp) {
 exp = " " + exp.trim();
 let quickRegex = /([\s\+\-\*\/%&\|\^!\*~]\s*?)([a-zA-Z_$][a-zA-Z_$0-9]*?)/g;
 exp = exp.replace(quickRegex, (a, b, c) => {
  return b + scopeName + '.' + c;
 });
 return exp;
}

首先把首位的空格全部去掉,為了和后面的統(tǒng)一,在開頭加上一個(gè)空格。

第一個(gè)正則匹配出猶如"t.e==0 ? f : d"的表達(dá)式中的變量會(huì)被作為c提取出來(lái),符號(hào)作為 b提取出來(lái)。

測(cè)試一下

現(xiàn)在已經(jīng)可以返回一個(gè)表達(dá)式了,改裝一下,讓表達(dá)式直接在里面執(zhí)行

function replaceWith(scope, exp) {
 exp = " " + exp.trim();
 let quickRegex = /([\s\+\-\*\/%&\|\^!\*~]\s*?)([a-zA-Z_$][a-zA-Z_$0-9]*?)/g;
 exp = exp.replace(quickRegex, (a, b, c) => {
  return b + 'scope.' + c;
 });
 let func = new Function("scope", "return " + exp);
 return func(scope);
}

測(cè)試一下

大功告成。

可能中間正則寫的不好,還有其他不嚴(yán)密的地方,歡迎園友補(bǔ)充。

String 原型上的正則方法

好久都沒怎么寫過(guò)大量代碼了,看到 Sring.prototype.split(//); 這個(gè)正則表達(dá)式,竟然把分割符號(hào)都給加到數(shù)組中了,很驚訝,在MDN上學(xué)了一下。順便做個(gè)整理,算是補(bǔ)充吧。

String.prototype.split(separator,[limit])

separator:指定用來(lái)分割字符串的字符(串)。separator 可以是一個(gè)字符串或正則表達(dá)式。 如果忽略 separator,則返回整個(gè)字符串的數(shù)組形式。如果 separator 是一個(gè)空字符串,則 str 將會(huì)把原字符串中每個(gè)字符的數(shù)組形式返回。

limit一個(gè)整數(shù),限定返回的分割片段數(shù)量。split 方法仍然分割每一個(gè)匹配的 separator,但是返回的數(shù)組只會(huì)截取最多 limit 個(gè)元素。

當(dāng)找到一個(gè) seperator 時(shí),separator 會(huì)從字符串中被移除,返回存進(jìn)一個(gè)數(shù)組當(dāng)中的子字符串。如果忽略 separator 參數(shù),則返回的數(shù)組包含一個(gè)元素,該元素是原字符串。如果 separator 是一個(gè)空字符串,則 str 將被轉(zhuǎn)換為由字符串中字符組成的一個(gè)數(shù)組。

注意:

Note: 當(dāng)字符串為空時(shí),split 返回一個(gè)包含一個(gè)空字符串的數(shù)組,而不是一個(gè)空數(shù)組。

如果 separator 是一個(gè)正則表達(dá)式,且包含捕獲括號(hào)(capturing parentheses),則每次匹配到 separator 時(shí),捕獲括號(hào)匹配的結(jié)果將會(huì)插入到返回的數(shù)組中。

var myString = "hello world";
var splits = myString.split(();

console.log(splits);

輸出

["hello world"]

var myString = "Hello 1 word. Sentence number 2.";
var splits = myString.split(/(\d)/);

console.log(splits);

輸出

Hello ,1, word. Sentence number ,2,.

String.prototype.replace()

這個(gè)方法開始已經(jīng)用到,就不再介紹。

String.prototype.match(Regex)

當(dāng)字符串匹配到正則表達(dá)式(regular expression)時(shí),match() 方法會(huì)提取匹配項(xiàng)。

如果正則表達(dá)式?jīng)]有 g 標(biāo)志,返回和 RegExp.exec(str) 相同的結(jié)果。而且返回的數(shù)組擁有一個(gè)額外的 input 屬性,該屬性包含原始字符串。另外,還擁有一個(gè) index 屬性,該屬性表示匹配結(jié)果在原字符串中的索引(以0開始)。

"1aef2af3ef4 5".match(/[a-z]*(\d)/)

輸出

["1", "1"]

如果正則表達(dá)式包含 g 標(biāo)志,則該方法返回一個(gè)包含所有匹配結(jié)果的數(shù)組。如果沒有匹配到,則返回 null。

注意,如果加g, 則分組無(wú)用

"1aef2af3ef4 5".match(/[a-z]*(\d)/g)

輸出

["1", "aef2", "af3", "ef4", "5"]

String.prototype.search(Regex)

search() 方法執(zhí)行一個(gè)查找,看該字符串對(duì)象與一個(gè)正則表達(dá)式是否匹配。

如果匹配成功,則 search() 返回正則表達(dá)式在字符串中首次匹配項(xiàng)的索引。否則,返回 -1。

類似于正則表達(dá)式的 test 方法 。

"aeg56".search(/[a-z]\d+/)

輸出

2

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • js實(shí)現(xiàn)的彩色方塊飛舞奇幻效果

    js實(shí)現(xiàn)的彩色方塊飛舞奇幻效果

    這篇文章主要介紹了js實(shí)現(xiàn)的彩色方塊飛舞奇幻效果,涉及JavaScript響應(yīng)鼠標(biāo)事件動(dòng)態(tài)操作頁(yè)面元素樣式的相關(guān)技巧,需要的朋友可以參考下
    2016-01-01
  • JS表單驗(yàn)證方法實(shí)例小結(jié)【電話、身份證號(hào)、Email、中文、特殊字符、身份證號(hào)等】

    JS表單驗(yàn)證方法實(shí)例小結(jié)【電話、身份證號(hào)、Email、中文、特殊字符、身份證號(hào)等】

    這篇文章主要介紹了JS表單驗(yàn)證方法,結(jié)合實(shí)例形式總結(jié)分析了常用的表單驗(yàn)證技巧,包括電話、身份證號(hào)、Email、中文、特殊字符、身份證號(hào)等驗(yàn)證方法,需要的朋友可以參考下
    2017-02-02
  • 前端監(jiān)控頁(yè)面異常的常用方法

    前端監(jiān)控頁(yè)面異常的常用方法

    前端開發(fā)常見問題之一: 資源異常、js異常,頁(yè)面出了問題常見的想法是:如何看到錯(cuò)誤信息,資源腳本是否正常,像js、css、圖片這些資源文件經(jīng)常受網(wǎng)絡(luò)等原因,導(dǎo)致資源加載異常,這些會(huì)直接影響我們的頁(yè)面,本文給大家介紹前端監(jiān)控頁(yè)面異常的常用方法,需要的朋友可以參考下
    2025-04-04
  • JavaScript?管道運(yùn)算符及工作原理

    JavaScript?管道運(yùn)算符及工作原理

    這篇文章主要介紹了JavaScript?管道運(yùn)算符,管道運(yùn)算符為我們的代碼添加了大量上下文,并簡(jiǎn)化了操作,以便以后可以擴(kuò)展它們,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • 理解 JavaScript 預(yù)解析

    理解 JavaScript 預(yù)解析

    JavaScript是解釋型語(yǔ)言是毋庸置疑的,但它是不是僅在運(yùn)行時(shí)自上往下一句一句地解析的呢?
    2009-10-10
  • JavaScript實(shí)現(xiàn)密碼強(qiáng)度實(shí)時(shí)驗(yàn)證

    JavaScript實(shí)現(xiàn)密碼強(qiáng)度實(shí)時(shí)驗(yàn)證

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)密碼強(qiáng)度實(shí)時(shí)驗(yàn)證,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • iframe自適應(yīng)寬度、高度 ie6 7 8,firefox 3.86下測(cè)試通過(guò)

    iframe自適應(yīng)寬度、高度 ie6 7 8,firefox 3.86下測(cè)試通過(guò)

    近期需要一個(gè)iframe自適應(yīng)高度的東西,在網(wǎng)上找了很多,都不能用……一看大體的日期都是大概 2008年前后的其他近期的基本都是以前的轉(zhuǎn)載,所以只好自己動(dòng)手了。
    2010-07-07
  • 數(shù)組Array的排序sort方法

    數(shù)組Array的排序sort方法

    下面小編就為大家?guī)?lái)一篇數(shù)組Array的排序sort方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • JavaScript獲取當(dāng)前頁(yè)面路徑的三種方法

    JavaScript獲取當(dāng)前頁(yè)面路徑的三種方法

    在Web開發(fā)中,我們經(jīng)常需要獲取當(dāng)前頁(yè)面的URL路徑,以便進(jìn)行導(dǎo)航、數(shù)據(jù)加載或其他與頁(yè)面相關(guān)的操作,JavaScript提供了幾種方法來(lái)幫助我們實(shí)現(xiàn)這一功能,在本文中,我們將探討幾種常用的方法,需要的朋友可以參考下
    2024-05-05
  • 微信小程序中選中手機(jī)相冊(cè)圖片上傳到服務(wù)器的步驟

    微信小程序中選中手機(jī)相冊(cè)圖片上傳到服務(wù)器的步驟

    這篇文章主要介紹了微信小程序中選中手機(jī)相冊(cè)圖片上傳到服務(wù)器的步驟,現(xiàn)圖片上傳我們需要使用chooseImg和uploadFile這兩個(gè)api,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2024-04-04

最新評(píng)論