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

首頁 > 編程 > regex > 正文

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

2020-01-20 22:09:46
字體:
來源:轉載
供稿:網友

首先聲明,本文所有的代碼都是在 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修飾符,作為一個有追求的碼農,當然不能止步于此,我們也可以使用其他方法繼續把這個完善

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品蜜臀一区二区三区免费| 日韩精品小视频| 国产一级揄自揄精品视频| 国产在线拍偷自揄拍精品| 国产精品扒开腿做爽爽爽视频| 欧美国产日本在线| 不卡中文字幕av| 亚洲成人久久电影| 一区二区三区视频免费在线观看| 91中文精品字幕在线视频| 国产精品国产三级国产aⅴ9色| 日韩免费视频在线观看| 国产日韩精品综合网站| 国产精品视频中文字幕91| 福利视频一区二区| 97人洗澡人人免费公开视频碰碰碰| 国产精品mp4| 亚洲欧美激情四射在线日| 九九精品在线观看| 精品视频—区二区三区免费| 青青草99啪国产免费| 久久亚洲精品毛片| 国产精品美女久久| 日韩国产精品亚洲а∨天堂免| 性欧美xxxx| 亚洲精品不卡在线| 欧美体内谢she精2性欧美| 久久精品久久久久| 欧美视频专区一二在线观看| 国内外成人免费激情在线视频网站| 国产精品高潮粉嫩av| 国产精品爱啪在线线免费观看| 韩国日本不卡在线| 久久亚洲精品网站| 91精品视频一区| 亚洲最大福利网站| 国产亚洲精品综合一区91| 久久久亚洲国产天美传媒修理工| 国产成人在线亚洲欧美| 992tv在线成人免费观看| 国产精品成熟老女人| 最近2019好看的中文字幕免费| 日韩精品在线免费| 国产午夜精品全部视频播放| 亚洲视频777| 精品视频久久久| 久久影视电视剧免费网站清宫辞电视| 欧美性色视频在线| 国产精品无av码在线观看| 日韩av中文字幕在线播放| 亚洲永久在线观看| 亚洲国产高潮在线观看| 国产精品九九久久久久久久| 91系列在线观看| 欧美精品亚州精品| 欧美性xxxx极品高清hd直播| 精品国产乱码久久久久酒店| 亚洲国产精品va| 国产啪精品视频网站| 国产91精品久久久久久| 日韩精品在线电影| 在线电影中文日韩| 精品国产一区二区在线| 色悠悠国产精品| 5252色成人免费视频| 色综合久久悠悠| 日韩亚洲在线观看| 丰满岳妇乱一区二区三区| 欧美极品美女视频网站在线观看免费| 亚洲日本欧美日韩高观看| 91理论片午午论夜理片久久| 亚洲欧美另类中文字幕| 日韩美女毛茸茸| 国内精品久久久久久久久| 亚洲人精选亚洲人成在线| 亚洲v日韩v综合v精品v| 91国偷自产一区二区三区的观看方式| 日韩中文字幕在线观看| 久热爱精品视频线路一| 亚洲精品永久免费精品| 国产成人一区二区三区| 91大神福利视频在线| 上原亚衣av一区二区三区| 欧美激情欧美狂野欧美精品| 91国产美女视频| 亚洲国产福利在线| 欧美精品在线播放| 欧美激情精品久久久久久蜜臀| 中文字幕精品久久久久| 久久精品国亚洲| 国产精品高清在线观看| 日韩av在线电影网| 国产在线日韩在线| 亚洲精品欧美日韩专区| 欧美日韩免费区域视频在线观看| 亚洲国产成人精品久久| 欧美老女人www| 亚洲va欧美va国产综合剧情| 国产精品mp4| 国产精品美女在线观看| 国产欧美va欧美va香蕉在线| 日韩精品亚洲视频| 精品久久久久久久中文字幕| 色悠悠久久88| 国产午夜精品一区理论片飘花| 久久久久久亚洲精品不卡| 亚洲视频精品在线| 国产精品一区久久久| 亚洲香蕉av在线一区二区三区| 国产精品视频网站| 国产91色在线免费| 热99精品里视频精品| 日韩最新av在线| 最近更新的2019中文字幕| 欧美日韩免费区域视频在线观看| 亚洲视频日韩精品| 伊人久久久久久久久久久久久| 国产一区二区三区在线| 久久影院免费观看| 日本道色综合久久影院| 国产美女搞久久| 91免费看视频.| 国内精品久久久久久中文字幕| 国产一区二区三区高清在线观看| 国模吧一区二区| 国产成人精彩在线视频九色| 在线观看日韩av| www.欧美视频| 日韩中文在线中文网在线观看| 亚洲视频在线视频| 在线观看久久av| 日韩av在线资源| 欧美黑人xxxx| 国产精品综合久久久| 午夜精品久久久久久久久久久久久| 精品久久国产精品| 精品成人在线视频| 亚洲成人精品视频| 影音先锋欧美精品| 韩国日本不卡在线| 国产一区视频在线播放| 亚洲成人三级在线| 97香蕉久久夜色精品国产| 亚洲欧美综合另类中字| 亚洲欧美日韩精品| 久久久久久国产免费| 日本国产高清不卡| 91九色视频在线| 日韩电影免费观看中文字幕| 91国语精品自产拍在线观看性色| 国产精品扒开腿做爽爽爽视频| 久久中文字幕国产| 亚洲激情视频网站| 成年人精品视频| 在线亚洲男人天堂| 亚洲国产精品成人va在线观看| 亚洲精品理论电影| 91av在线播放视频| 国产亚洲人成网站在线观看| 狠狠色狠狠色综合日日小说| 91sao在线观看国产| 青青久久av北条麻妃海外网| 成人黄色网免费| 欧美一级大片在线观看|