校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 當ES6遇上字符串和正則表達式

當ES6遇上字符串和正則表達式

熱門標簽:呼叫系統外呼只能兩次 西藏智能外呼系統代理商 梅縣地圖標注 400電話辦理電話辦理 甘肅醫療外呼系統排名 貴港公司如何申請400電話 ai電話機器人搭建 外呼系統無呼出路由是什么原因 地圖標注教學點

字符串是一種重要的數據類型,而正則表達式則是賦予了編程人員更多操作字符串的能力。ES6的創作者為字符串和正則表達式添加了許多的新功能。下面玲瓏將來進行一個全面的總結。

字符串和正則兩個部分各兩節,全文閱讀時間大約10分鐘

字符串

1.更好的Unicode支持

Unicode是一個字符集。將全世界所有的字符包含在一個集合里,計算機只要支持這一個字符集,就能顯示所有的字符,再也不會有亂碼了。

在es6出現之前,js字符串一直基于16位字符編碼進行構建。每16位序列是一個編碼單元,代表一個字符,Unicode0引入擴展字符集,16位字符編碼將不再包含任何字符。編碼規則也因此變更。

對于UTF-16來說,碼位可以有多個編碼單元表示,是表示不是組成。

對于UTF-16前2^16個碼位都是16位的編碼單元表示,這個范圍被稱作基本多文種平面BMP,當超過時,引入代理對,規定用兩個16位編碼單元表示一個碼位,即32位輔助平面字符。一個32位代理對表示字符長度為1,但是length屬性值為2.

如果想進一步了解他可以參考阮一峰的一片日志: www.ruanyifeng.com/blog/2014/1… 日志里面說到的碼點就是碼位

1.1codePointAt(0)方法

在es6之前,charCodeAt()方法返回字符每個16位編碼單元對應的數值,再在es6中新增了codePointAt方法,codePointAt(0)返回的是位置0處的碼點或者說是位置0處的碼位,包含多個編碼單元>16進制上限FFFF,charCodeAt(0)方法返回的是位置0的第一個編碼單元.

因此可以用此方法判斷一個字符占用編碼單元的數量

function is32Bit(c) {
  
  return c.codePointAt(0) > 0xFFFF;
}
console.log(is32Bit("吉利")); //true
console.log(is32Bit("a"));  //false

1.2 String.fromCodePoint()方法

codePointAt()方法在字符串中檢索一個字符串的碼位,也可以使用String.fromCodePoint()方法根據指定的碼位生成一個字

console.log(String.fromCodePoint(134071));   //吉

1.3normalize()方法

在比較字符或者進行排序的時候,可能出現等價的情況,然而等價卻存在兩種情況

  • 規范的等效是無論從哪個角度來看,兩個序列的碼位都是沒有區別的
  • 兼容的碼位序列看起來不同,但是在特定的情況下可以交換使用。 但是在嚴格模式下不是等效的,除非通過某些方法把這種等效關系標準化

normalize()方法提供Unicode的標準化形式,,這個方法可以接受一個可選的字符串參數。Unicode標準化形式有四種

以標準等價方式分解,然后以標準等價方式重組(“NFC”),默認值選項

  • 以標準等價方式分解(“NFD”)
  • 以兼容等價方式分解(“NFKC”)
  • 以兼容方式分解,然后以標準等價方式重組

1.4 正則表達式u修飾符

正則表達式后添加u修飾符會將編碼單元模式切換成字符模式,這個時候的代理對不會被視為兩個字符。

但是length這個屬性返回的仍然是字符串編碼單元的數量,而不是碼位的數量。但是也可以通過帶u修飾符的正則表達式來解決這個問題。

function codePointerLength(text) {
  let result = text.match(/[\s\S]/gu);
  return result ? result.length:0;
}
console.log(codePointerLength("吉abc")); //4

檢測是否支持u修飾符

u修飾符在不兼容ES6的JavaScript引擎中使用會導致語法錯誤,可以通過以下函數檢測是否支持。

function hasRegExpU() {
  try{
    var pattern = new Regexp(".","u");
    return ture;
  }catch (ex) {
    return false;
  }
}

2.其他字符串的變更

2.1字符串中的字串識別

開發者們用indexOf()方法在一段字符串中檢測另一段子字符串。在es6中提供3個方法達到類似的效果

  • startWith()方法,在字符串起始部分檢測指定文本返回true,否則返回false。
  • incledes()方法,如果在字符串中檢測到指定文本返回true,否則返回false。
  • endWith()方法,顧名思義在末尾檢測,用法與上面一致。

上面三個方法接受兩個參數,第1個參數是指定要搜索的文本是一個字符。第2個是開始搜索位置的索引值是一個數字。不指定第二個參數endwith一般從字符串末尾處開始匹配。示范如下

let mes = "hello world";
console.log(mes.startWith("hello"));
console.log(mes.endWith("!"));
console.log(mes.includes("o"));
console.log(mes.startWith("o"));
console.log(mes.endWith("d!"));
console.log(mes.includes("x"));
console.log(mes.startWith("o",4));
console.log(mes.endWith("o",8));
console.log(mes.includes("o",8));
//9個結果依次為:true true true  false true false  true true false
console.log(mes.endWith("o",8));會從第7位第二個o開始匹配。索引值-要搜索文本的長度=8-1

2.2 repeat()方法

es6為字符串新增加的repeat()方法,接受一個number類型的參數,返回重復該次數的一個新字符串。

console.log(x.repeat(3)); //"xxx"

我是2條分割線,嘎嘎嘎

正則表達式

1.其他正則表達式的變更

1.1正則表達式y修飾符

y修飾符粘滯正則表達式,從正則表達式的lastIndex屬性開始進行。如果指定位置沒有匹配成功那么將停止匹配并返回結果。

let text = 'hello1 hello2 hello3';
let patt = /hello\d\s?/,
  result = patt.exec(text);
let gPatt = /helllo\d\s?/g,
  gResult = gPatt.exec(text);
let yPatt = /hello\d\s?/y,
  yResult = yPatt.exec(text);
console.log(resut[0]);  //"hello1 "
console.log(gResut[0]);  //"hello1 "
console.log(yResut[0]);  //"hello1 "
patt.lastIndex = 1;
gPatt.lastIndex = 1;
yPatt.lastIndex = 1;
result = patt.exec(text);
gResult = gPatt.exec(text);
yResult = yPatt.exec(text);
console.log(resut[0]);  //"hello1 "
console.log(gResut[0]);  //"hello2 "
console.log(yResut[0]);  //拋出錯誤

這里三個正則表達式中,第一個沒有修飾符,第二個全局修飾符g,第三個用了y修飾符。

第一次匹配的時候是從h字符開始匹配。當lastIndex = 1;之后,對于沒有修飾符的表達式自動忽略這個變化,結果還是hello1 ,g修飾符會從e字符開始匹配,輸出hello2 ,yResul會從e字符開始匹配,ello h與之不等,最后結果為null,所以會拋出錯誤。

當執行y修飾符之后,會把上一次匹配最后的一個字符的后一位索引值保存在lastIndex中去,如果執行y修飾符匹配結果為空那么lastIndex值會被重置為0,g修飾符與此相同。

只有調用正則表達式對象的exec()和test()這些方法時才會設計lastIndex屬性,如調用字符串的方法natch()就不會觸發粘滯行為。

檢測y修飾符是否存在可以用sticky屬性,如果js引擎支持粘滯修飾符,則stickey屬性值為true,否則為false

let patt = /hello\d/y;
console.log(patt.sticky);

1.2正則表達式的復制

在es5中,可以給正則表達式的構造函數傳遞正則表達式作為參數來復制這個正則表達式。但事實第一個參數為正則表達式的時候不能用第二個參數,es6中修改了這個行為,第二個參數可以是修飾符。

let re1 = /ab/i;
let re2 = new RegExp(re1,"g");
console.log(re1.toString()); // "/ab/i"
console.log(re2.toString()); // "/ab/g"

1.3flags屬性

es6新增的flags屬性會返回所有應用于當前正則表達式的修飾符

let re = /ab/g;
console.log(re.source);  //"ab"
console.log(re.flags);  //"g"

2.模板字面量

2.1基礎語法

一句話概括,用反撇號(`)代替了雙引號,單引號。

如果想在字符串中用反撇號,就用\轉義即可。如

let message = `\`hello\`!`;
console.log(message);

結果是 hello!

2.2簡化的多行字符串

在es6之前,通過數組或字符串拼接的方法來創建多行字符串,es6中只需要在代碼中直接換行,換行也改變length屬性值。同時再反撇號中所有的空格符都屬于字符串的一部分。

let message = `Multiline
string`;
console.log(message);
console.log(message.length);  //16=6+9+1

2.3 字符串占位符

在一個模板字面量中,你可以把任何合法的JavaScript表達式嵌入到占位符中并將其作為字符串的一部分輸出到結果中。

占位符通常由${}組成,中間可包含任何JavaScript表達式。模板字面量本身也是JavaScript表達式,因此在一個模板字面量里面可以嵌入另外一個模板字面量。

let name = "sarah";
let message = `my${`name is${name}.`}`;
console.log(message);//my name is sarah.

message是一個模板字面量,里面又包含了name is${name}.這個模板字面量。

總結

以上所述是小編給大家介紹的當ES6遇上字符串和正則表達式,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

您可能感興趣的文章:
  • ES6學習筆記之正則表達式和字符串正則方法分析
  • ES6(ECMAScript 6)新特性之模板字符串用法分析
  • ES6正則表達式的一些新功能總結

標簽:哈密 湖州 常州 本溪 泰安 大興安嶺 涼山

巨人網絡通訊聲明:本文標題《當ES6遇上字符串和正則表達式》,本文關鍵詞  當,ES6,遇上,字符串,和,正則,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《當ES6遇上字符串和正則表達式》相關的同類信息!
  • 本頁收集關于當ES6遇上字符串和正則表達式的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    日韩av中文字幕一区二区| 9i看片成人免费高清| 日韩欧美国产午夜精品| 免费在线一区观看| 精品久久一区二区| 大胆亚洲人体视频| 亚洲一区二区三区激情| 欧美人牲a欧美精品| 国内外成人在线| 国产精品久久久一本精品| 日本精品裸体写真集在线观看 | 久久久久国产精品麻豆ai换脸 | 欧美日韩国产高清一区二区三区| 午夜精品aaa| 久久奇米777| 91视频在线观看免费| 无码av免费一区二区三区试看 | 国产一区二区三区不卡在线观看 | 中文字幕一区二区三区四区不卡 | 972aa.com艺术欧美| 午夜不卡av在线| 久久综合一区二区| 在线一区二区视频| 国内精品国产三级国产a久久| 中文字幕av一区二区三区高 | 久88久久88久久久| 国产精品久久99| 欧美一区二区在线免费观看| 国产一区91精品张津瑜| 亚洲午夜久久久久久久久电影网 | 日韩av网站在线观看| 国产精品美女久久久久aⅴ| 欧美日韩一区视频| 成人性生交大片免费看中文| 五月天丁香久久| 国产精品久久久久9999吃药| 日韩欧美国产一二三区| 91色|porny| 国产一区二三区好的| 一区二区三区在线观看国产| 久久九九久久九九| 日韩一级欧美一级| 91成人国产精品| 成人妖精视频yjsp地址| 久久精品久久久精品美女| 一级中文字幕一区二区| 日本一区二区三区高清不卡| 欧美一级欧美三级在线观看| 91高清视频免费看| 9久草视频在线视频精品| 国产一区二区三区免费| 琪琪一区二区三区| 亚洲二区在线视频| 一区二区三区欧美在线观看| 欧美国产日韩精品免费观看| 日韩欧美高清一区| 91麻豆精品国产91久久久久久久久 | 不卡的av电影在线观看| 国产精品综合在线视频| 久久91精品国产91久久小草| 丝袜美腿亚洲一区二区图片| 一区二区三区不卡在线观看| 中文字幕亚洲电影| 国产精品久久一级| 欧美国产亚洲另类动漫| 国产天堂亚洲国产碰碰| 久久久国产精品麻豆| 日韩你懂的在线播放| 在线不卡免费欧美| 欧美精品久久久久久久多人混战 | 成人18视频日本| 国产成人啪午夜精品网站男同| 捆绑紧缚一区二区三区视频| 蜜桃一区二区三区四区| 日韩中文字幕91| 日韩激情一二三区| 爽好久久久欧美精品| 天堂久久一区二区三区| 丝袜诱惑亚洲看片| 美国十次了思思久久精品导航| 偷拍一区二区三区| 美女高潮久久久| 激情都市一区二区| 国产精品一二三在| 成人丝袜18视频在线观看| www.色综合.com| 在线观看一区不卡| 欧美性生活影院| 日韩一区和二区| 久久久久国产精品厨房| 国产精品美女一区二区在线观看| 中文字幕亚洲综合久久菠萝蜜| 最新中文字幕一区二区三区| 亚洲精品久久嫩草网站秘色| 亚洲一区二区精品视频| 欧美aaa在线| 国产mv日韩mv欧美| 色美美综合视频| 欧美一级黄色大片| 久久亚洲综合av| 中文字幕综合网| 日韩精品成人一区二区三区| 国内外成人在线| 91麻豆高清视频| 51午夜精品国产| 日本一区二区三区久久久久久久久不| 日韩理论片在线| 免费观看91视频大全| 国产aⅴ综合色| 欧美色涩在线第一页| 精品成人一区二区| 亚洲情趣在线观看| 奇米色一区二区三区四区| 成人一区二区三区视频在线观看| 色激情天天射综合网| 精品久久久久久亚洲综合网 | 国产欧美一区二区在线| 亚洲自拍与偷拍| 国产乱码字幕精品高清av | 欧美一级一区二区| 国产精品久久久久久久久果冻传媒| 亚洲一区二区在线免费观看视频| 久久99久久99小草精品免视看| www..com久久爱| 日韩午夜精品电影| 亚洲免费在线观看| 国产伦精品一区二区三区免费| 91豆麻精品91久久久久久| 欧美精品一区二区三区蜜桃| 夜夜夜精品看看| 成人开心网精品视频| 91精品国产欧美一区二区成人| 最新中文字幕一区二区三区 | 午夜免费久久看| 成人免费视频网站在线观看| 欧美一区二区三区喷汁尤物| 亚洲精品日韩一| 国产成人综合自拍| 日韩欧美国产综合一区| 亚洲一区二区视频| 99久久婷婷国产综合精品电影| 亚洲精品在线观看视频| 三级欧美韩日大片在线看| 99re视频精品| 国产欧美日韩激情| 91丨九色丨黑人外教| 亚洲精品在线观看视频| 日本女优在线视频一区二区| 欧美影院一区二区| 最好看的中文字幕久久| 国产一区二区在线观看视频| 日韩欧美在线观看一区二区三区| 亚洲自拍都市欧美小说| 一本到不卡免费一区二区| 国产精品人妖ts系列视频| 国产一区二区伦理| 久久综合999| 国内精品伊人久久久久av一坑 | xfplay精品久久| 麻豆成人av在线| 日韩欧美视频在线| 男女男精品视频| 日韩欧美国产综合| 久久国产精品第一页| 日韩精品一区二区三区swag| 蜜臀久久久久久久| 欧美大片在线观看| 久久97超碰色| 久久久影视传媒| 懂色av一区二区在线播放| 欧美经典一区二区三区| 国产成人精品免费看| 国产精品高潮呻吟| 色哟哟国产精品| 亚洲国产精品久久不卡毛片| 欧美亚洲动漫制服丝袜| 性欧美大战久久久久久久久| 欧美疯狂性受xxxxx喷水图片| 亚洲成a天堂v人片| 日韩写真欧美这视频| 蓝色福利精品导航| 久久香蕉国产线看观看99| 国产高清无密码一区二区三区| 国产精品天美传媒| 色婷婷综合久久久中文字幕| 亚洲国产一二三| 精品少妇一区二区| 粉嫩av一区二区三区在线播放| 一色桃子久久精品亚洲| 在线观看亚洲a| 麻豆视频观看网址久久| 国产亚洲一本大道中文在线| 91丨porny丨最新| 秋霞av亚洲一区二区三| 久久免费偷拍视频| 日本道在线观看一区二区| 日韩电影在线免费观看| 国产欧美一区二区三区在线看蜜臀| 94色蜜桃网一区二区三区| 婷婷综合五月天|