亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Regex > 正文

正則表達式之 Unicode 匹配特殊字符

2020-03-16 21:04:04
字體:
來源:轉載
供稿:網友
本篇文章由武林網小編給大家分享正則表達式巧用 Unicode關鍵字 匹配特殊字符,感興趣的朋友一起學習吧
 

首先聲明,本文所有的代碼都是在 ES6 下面運行,ES5需要修改之后才能運行,但是本文沒有涉及到太多的ES6新特性,而且由于v8對u修飾符不支持,最后的實現也基本是用ES5的知識寫的代碼。

最初我只是想記錄下正則表達式用unicode的方式來匹配特殊字符,寫著寫著發現 v8 對 u 修飾符的不支持,又轉而去研究怎么轉換字符串到utf-16的格式,在研究怎么轉換的過程中發現ES5的正則對 unicode 編碼單元 > 0x10000 的字符串不支持,再轉而去實現了一遍對大于 0x10000 的字符串的轉換,特此記錄。

之前有遇到過一個實用正則表達式匹配特殊字符的需求,例如一段文本 'ab*cd$你好我也好]/nseg$me*ntfault/nhello,world' ,用戶可以選擇用 * 或者 $ 來分割字符串。

在javascript中, $ 和 * 都是預定義的特殊字符,不能直接寫在正則表達式中,而需要轉義,寫成 //$/ 或者 //*/ 。

我們需要根據用戶的選擇來寫正則表達式,封裝成一個函數就是:

 

復制代碼代碼如下:

function reg(input) {
    return new RegExp(`//${input}`)
}

 

這種寫法初看上去很美好,將字符都轉義之后遇到一些特殊的字符可以匹配,然而現實是殘酷的:當用戶輸入的是 n 或者 t 這一類的字符的話,返回的正則表達式為 //n/ 或者 //t/ ,匹配的就是所有的制表符,這就違背了用戶的初衷。

通常有一種寫法就是把所有需要轉義的特殊字符都列出來,然后再逐一匹配,這種寫法很耗費精力,而且可能因為沒有統計到的特殊字符而出現漏匹配的情況。

這個時候unicode就隆重登場了,在 JavaScript 中,我們也可以用unicode來表示一個字符,例如 'a' 可以寫成'/u{61}', '你' 也可以寫成 '/u{4f60}'。

關于unicode的介紹大家可以看 Unicode與JavaScript詳解

ES5 中提供了 charCodeAt() 方法來返回指定索引處字符的 Unicode 數值,但是 Unicode 編碼單元 > 0x10000 的除外, ES2015 中又增加了一個新的方法 codePointAt() 可以返回大于 0x10000 字符串的數值。返回的數值是十進制的,此時我們還需要通過 toString(16) 轉成16進制。

封裝之后的函數如下

 

復制代碼代碼如下:

function toUnicode(s) {
    return `//u{${s.codePointAt().toString(16)}}`
}
toUnicode('$') -> '/u{24}'

 

重新封裝reg函數為

 

復制代碼代碼如下:

function reg(input) {
    return new RegExp(`${toUnicode(input)}`, 'u')
}

 

其實寫到這里,我希望是對的,但是很不幸,V8 不支持 RegExp 的 u 修飾符。V8支持的話,寫到這里就應該結束了,沒關系,這里只是提供一種用unicode的方式來轉義特殊字符的思想。

雖然v8不支持u修飾符,作為一個有追求的碼農,當然不能止步于此,我們也可以使用其他方法繼續把這個完善
 

  1. function toUnicode(s) { 
  2.  var a = `//u${utf(s.charCodeAt(0).toString(16))}` 
  3.  if(s.charCodeAt(1)) 
  4.  a = `${a}//u${utf(s.charCodeAt(1).toString(16))}`  
  5.  return a   
  6. function utf(s) { 
  7.  return Array.from('00').concat(Array.from(s)).slice(-4).join(''
  8. // 這里用var而沒有用let聲明,是因為這些代碼直接復制到 chrome 的控制臺下就可以看到執行結果 
  9. // 測試一下 
  10. // toUnicode('a')  --> "/u0061" 
  11. // toUnitcode('??') --> "/ud842/udfb7" 
  12. function reg(input) { 
  13.  return new RegExp(`${toUnicode(input)}`) 
  14. // 再測試一下 
  15. reg('$').test('$') --> true 
?

以上內容就是武林網小編給大家分享的正則表達式之 Unicode 匹配特殊字符


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲精品成人av久久ww| 日韩av中文字幕在线免费观看| 夜夜躁日日躁狠狠久久88av| 成人亚洲激情网| 一本一本久久a久久精品综合小说| 成人做爰www免费看视频网站| 青青草99啪国产免费| 欧美黄色片免费观看| 国产精品一区二区三区毛片淫片| 日韩亚洲欧美中文在线| 久久久精品国产亚洲| 日韩专区中文字幕| 亚洲成人久久一区| 国产在线播放不卡| 日韩中文字幕在线免费观看| 深夜福利91大全| 亚洲综合国产精品| 日韩亚洲在线观看| 国产在线精品播放| 一区二区三区无码高清视频| 欧美俄罗斯乱妇| 热久久99这里有精品| 日韩av在线免费| 国产精品日韩一区| 亚洲精品在线观看www| 欧美中文字幕在线| 午夜精品久久17c| 久久久久国产精品www| 久久久黄色av| 成人国产亚洲精品a区天堂华泰| 黑人狂躁日本妞一区二区三区| 91国产美女在线观看| 国产在线观看不卡| 亚洲国产精品高清久久久| 久久精品99久久香蕉国产色戒| 亚洲欧美日韩久久久久久| 欧美日韩午夜视频在线观看| 国产精品色午夜在线观看| 日韩在线观看高清| 97国产精品视频| 欧美日韩性视频在线| 日韩中文字幕欧美| 欧美专区国产专区| 欧美一级视频免费在线观看| 国产日韩在线亚洲字幕中文| 日韩在线观看免费网站| 日韩精品中文字幕在线播放| 国产拍精品一二三| 亚洲视屏在线播放| 亚洲女人被黑人巨大进入| 久久久精品中文字幕| 亚洲欧美精品在线| 亚洲影院在线看| 成人午夜在线影院| 亚洲第一视频网站| 91亚洲国产成人精品性色| 尤物九九久久国产精品的特点| 中文字幕精品av| 最近2019中文字幕在线高清| 茄子视频成人在线| 97在线观看免费| 91精品国产免费久久久久久| 中文日韩电影网站| 久久久久久一区二区三区| 成人信息集中地欧美| 亚洲欧洲在线视频| 97视频在线观看成人| 秋霞av国产精品一区| 亚洲风情亚aⅴ在线发布| 日韩中文字幕在线视频播放| 久久综合免费视频| 国产精品一区电影| 成人性教育视频在线观看| 欧美怡红院视频一区二区三区| 国产一区二区精品丝袜| 欧美色视频日本版| 日韩在线视频中文字幕| 国产精品91久久久久久| 久久久噜噜噜久久中文字免| 亚洲精品电影在线观看| 国产一区二区三区视频免费| 亚洲黄在线观看| 久久久亚洲福利精品午夜| 在线视频日本亚洲性| 亚洲天堂日韩电影| 亚洲人成伊人成综合网久久久| 精品欧美aⅴ在线网站| 欧美成在线视频| 国产91ⅴ在线精品免费观看| 亚洲色图校园春色| 亚洲欧美国产va在线影院| 国模吧一区二区| 精品中文字幕视频| 91精品在线一区| 欧美在线视频一区二区| 韩日欧美一区二区| 韩曰欧美视频免费观看| 国产视频久久网| 午夜剧场成人观在线视频免费观看| 菠萝蜜影院一区二区免费| 国产精品xxxxx| 欧美成人四级hd版| 国产精品91久久久久久| 91久久精品美女高潮| 国产精品1234| 亚洲欧美日韩一区二区三区在线| 亚洲视频777| 亚洲欧洲高清在线| 7777精品视频| 久久久久久久久久婷婷| 亚洲图片制服诱惑| 国产精品久久91| 国产精品久久久久久久久久久久久久| 欧美影院成年免费版| 午夜精品蜜臀一区二区三区免费| 国产91精品青草社区| 97精品视频在线观看| 亚洲精品欧美日韩专区| 成人妇女免费播放久久久| 中文在线资源观看视频网站免费不卡| 久久精品美女视频网站| 国产一区二区三区四区福利| 国产成人在线亚洲欧美| 在线观看免费高清视频97| 欧美日韩美女在线| 日韩亚洲综合在线| 久久99久久99精品免观看粉嫩| 奇米一区二区三区四区久久| 欧美久久精品一级黑人c片| 久久九九热免费视频| 4444欧美成人kkkk| 亚洲第一福利视频| 亚洲国产私拍精品国模在线观看| 欧美日韩性视频| 美日韩精品免费视频| 国产精品www| 亲子乱一区二区三区电影| 亚洲级视频在线观看免费1级| 最近2019中文字幕在线高清| 日本精品视频在线播放| 精品综合久久久久久97| 成人h视频在线| 国产欧美精品va在线观看| 欧美综合国产精品久久丁香| 成人午夜高潮视频| 尤物yw午夜国产精品视频明星| 久久五月天综合| 亚洲欧洲一区二区三区在线观看| 国产欧美亚洲精品| 久久精品在线视频| 欧美一乱一性一交一视频| 精品综合久久久久久97| 国内精久久久久久久久久人| xxav国产精品美女主播| 国产99视频在线观看| 永久免费毛片在线播放不卡| 久久综合伊人77777| 日韩欧美在线第一页| 日韩一区二区三区xxxx| 欧美性猛交xxxx乱大交| 成人www视频在线观看| 91亚洲国产成人久久精品网站| 欧美日韩一区二区免费视频| 中文字幕亚洲欧美|