好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 正則表達式之 Unicode 匹配特殊字符

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

熱門標簽:400免費電話去哪申請 鄂州人工智能電銷機器人軟件 實用地圖標注app 線上教育ai外呼系統 地圖標注商戶中心要收錢多少 地圖標注字母的軟件 宿遷智能外呼系統供應商 菏澤智能ai電銷機器人銷售公司 css百度地圖標注位置顯示

首先聲明,本文所有的代碼都是在 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"
// toUnitcode('��') --> "\ud842\udfb7"
function reg(input) {
 return new RegExp(`${toUnicode(input)}`)
}
// 再測試一下
reg('$').test('$') --> true

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

您可能感興趣的文章:
  • 正則表達式教程之匹配單個字符詳解
  • String字符串匹配javascript 正則表達式
  • C#匹配中文字符串的4種正則表達式分享
  • 正則表達式匹配不包含某些字符串的技巧
  • js 正則表達式學習筆記之匹配字符串
  • 正則表達式 匹配至少有一個非空白字符并且不超過指定長度
  • 匹配任意字符的正則表達式寫法
  • Python 匹配任意字符(包括換行符)的正則表達式寫法
  • 正則表達式匹配任意字符(包括換行符)的寫法
  • 請教一個正則表達式,匹配所有Html標簽外部的指定字符串
  • PHP中正則表達式對UNICODE字符碼的匹配方法
  • 正則表達式教程之匹配一組字符詳解

標簽:六安 恩施 三亞 池州 咸陽 綿陽 梅州 鞍山

巨人網絡通訊聲明:本文標題《正則表達式之 Unicode 匹配特殊字符》,本文關鍵詞  正則,表達式,之,Unicode,匹配,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《正則表達式之 Unicode 匹配特殊字符》相關的同類信息!
  • 本頁收集關于正則表達式之 Unicode 匹配特殊字符的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 大地资源网中文在线观看| 国内偷自拍美女偷自拍视频| 懂色国产亚洲精产一二三产区精品| yellow高清在线观看播放手机观看| 右玉县| 2012手机看片在线观看免费| 国产女人18毛片水真多18| 久久亚洲一区| h无遮挡男女激烈动态图| 久久99精品国产.久久久久久| 皇后你好紧臣进不去H| 女攻h男瘫痪失禁| 国产精品亚洲一区二区三区久久| 用牛奶灌进女人屁股眼的视频| 农村妇女野战A片| 欧美一级视频免费看| 日本边吃奶边摸边做在线视频 | 国产成人a人亚洲精v品无码| 韩国一级一级A片免费观看| 女攻男受啪哭男主h| 亚洲色图26p| 成人版《埃及艳后》在线观看| 精品香蕉国产一区二区三区四区| cctv8在线直播观看| 荡女淫春2古装| 木乃伊成人h版| 91狠狠综合久久久久久精品网站| 丝袜美女足淫美足美脚网站| 使用跳d视频| 久久亚洲国产的中文| 精壮黑人大战白妇magnet| JUQ-378人妻秘書汗と接吻| 宝贝夹紧一点| 秋霞2019理论成人鲁丝片| 精品无码亚洲一区二区| 满园春色欧美日韩在线| 626969四不像| 亚洲国产精品综合久久| 秘?成人免费网站小说| 老师~乖把腿张开让你更爽的视h 337p人体大尺度啪啪私拍 | 双性受农村糙汉攻|