成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么'\x1B'.length === 1?\x與\u知識延伸

開發 前端
自己從0-1寫一個正則難免會有許多邊界情況考慮不周全,于是在chalk的README中找到了chalk/ansi-regex[3]這個庫。

[[427162]]

背景

先講一下背景,再說原因

大多數庫都會在日志中使用chalk庫為console的內容進行上色

被chalk處理后,其原本的內容會被‘\x1B...’所包裹

  1. console.log(chalk.blue('green')); 
  2. console.log([chalk.blue('green')]); 

圖片

在開發vite-plugin-monitor[1]時,為了獲取原始的日志內容(上色之前),需要將上色后的字符串還原

  1. \x1B[34mgreen\x1B[39m => green 

在使用正則處理內容的時候發現了一個問題

  1. '\x1B'.replace(/\\x/,'') // 結果?? 

通過.length查看其長度,結果就如標題所示

原因

反斜杠"\"通常標識轉義字符,如\n(換行符),\t(制表符)

而\x就標識16進制,后面跟上兩位16進制數

與此同時還有\u也是標識16進制,但其后面需跟上4位16進制數

因此這里的\x1B實際上就是一個字符

  1. '\x41' === 'A'   // true 
  2. 'A' === '\u0041' // true 

\x

\xhh匹配一個以兩位十六進制數(\x00-\xFF)表示的字符

主要用于ASCII碼[2]的表示

  1. '\x41' === ‘A’ 
  2. 'A' === String.fromCharCode(65) 
  3.  
  4. '\x61' === ‘a’ 
  5. 'a' === String.fromCharCode(97) 

\x后必須跟著兩位16進制的字符,否則會報錯,其中 A-F 不區分大小寫

  1. '\x1' // Uncaught SyntaxError: Invalid hexadecimal escape sequence 
  2. '\xfg' // Uncaught SyntaxError: Invalid hexadecimal escape sequence 

\u

\uhhhh匹配一個以四位十六進制數(\u0000-\uFFFF)表示的 Unicode 字符。

在正則表達式中常見于匹配中文字符

  1. const r = /[\u4e00-\u9fa5]/ 
  2. r.test('中文') // true 
  3. r.test('English') // false 

常規字符與Unicode字符互轉

str2Unicode

使用String.prototype.charCodeAt獲取指定位置的 Unicode 碼點(十進制表示)

使用String.prototype.toString將其轉為十六進制字符,轉為16進制字符不會自動補0

通過String.prototype.padStart進行補0

編寫的通用處理方法如下

  1. function str2Unicode(str) { 
  2.     let s = '' 
  3.     for (const c of str) { 
  4.         s += `\\u${c.charCodeAt(0).toString(16).padStart(4, '0')}` 
  5.     } 
  6.     return s 
  7.  
  8. str2Unicode('1a中文') // '\\u0031\\u0061\\u4e2d\\u6587' 

unicode2Str

通過正則/\\u[\da-f]{4}/g匹配出所有的unicode字符

  1. 使用Number將0x${matchStr}轉換為10進制數
  2. 使用String.fromCodePoint將unicode碼點轉為字符
  3. 使用String.prototype.replace進行逐字符的轉換
  1. function str2Unicode(str) { 
  2.     let s = '' 
  3.     for (const c of str) { 
  4.         s += `\\u${c.charCodeAt(0).toString(16).padStart(4, '0')}` 
  5.     } 
  6.     return s 
  7.  
  8. str2Unicode('1a中文') // '\\u0031\\u0061\\u4e2d\\u6587' 

還原chalk處理后的字符串

自己從0-1寫一個正則難免會有許多邊界情況考慮不周全,于是在chalk的README中找到了chalk/ansi-regex[3]這個庫

可以將色值相關的 ANSI轉義碼 匹配出來

  1. import ansiRegex from 'ansi-regex'
  2.  
  3. '\u001B[4mcake\u001B[0m'.match(ansiRegex()); 
  4. //=> ['\u001B[4m''\u001B[0m'
  5.  
  6. '\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); 
  7. //=> ['\u001B[4m'

編寫一下處理方法

  1. function resetChalkStr(str) { 
  2.     return str.replace(ansiRegex(), ''

測試

  1. console.log(chalk.green('green'), chalk.greenBright('greenBright')); 
  2.  
  3. console.log([chalk.green('green'), chalk.greenBright('greenBright')]); 
  4.  
  5. console.log(resetChalkStr(`${chalk.green('green')} ${chalk.greenBright('greenBright')}`)); 

總結

重拾了一下\x與\u相關的內容,突然額外想到一個點,使用\u去做字符串的加解密(下來再捋一捋)

解決了一個chalk相關的問題“還原終端中的彩色內容”

參考資料

[1]vite-plugin-monitor: https://github.com/ATQQ/vite-plugin-monitor

[2]ASCII碼: https://tool.oschina.net/commons?type=4

[3]chalk/ansi-regex: https://github.com/chalk/ansi-regex

 

責任編輯:武曉燕 來源: 粥里有勺糖
相關推薦

2012-06-21 14:26:52

筆記本評測

2010-06-10 12:37:05

UML2.0

2022-11-02 07:39:53

CPU計算機C 語言

2017-08-03 10:38:32

HADOOP1.XHDFSHadoop

2024-02-20 22:13:49

SQL語句編程

2014-03-24 10:49:20

諾基亞UI京東

2011-12-18 21:35:59

筆記本評測

2021-11-15 06:56:45

MyBatis開發項目

2016-08-05 17:08:10

PythonWebpackAngular

2015-01-06 11:13:21

CES2015264核Tegra X蘋果A8X

2014-05-09 11:23:29

iOS移動互聯網

2011-08-21 12:52:44

筆記本評測

2014-07-11 09:11:36

IBMsystem x聯想

2013-10-30 10:47:32

2009-04-08 08:44:40

Windows Mob移動OS微軟

2011-06-20 11:39:39

筆記本評測

2011-04-25 15:29:00

聯想ThinkPad

2012-08-09 12:05:05

筆記本

2012-10-11 15:45:24

MacBook碳纖維

2012-02-13 14:56:18

三星筆記本
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 女同久久另类99精品国产 | www亚洲一区| 国产精品欧美一区二区三区不卡 | 日本精品视频在线 | 天天久久 | 精品亚洲永久免费精品 | 成人国产在线视频 | 国产午夜精品一区二区三区在线观看 | 亚洲精品一区二三区不卡 | 精品国产精品三级精品av网址 | 久久99精品国产麻豆婷婷 | 免费一区二区在线观看 | 男女污网站 | 天天干.com | 日韩一二三| 久久精品一区二区视频 | 超碰天天 | 夜夜骑综合 | 国产精品美女久久久久aⅴ国产馆 | 久久久成人网 | 99精品视频在线观看免费播放 | 久久天堂网| 999久久久久久久久6666 | 久久久久久久一区二区三区 | 成人h动漫亚洲一区二区 | 中国三级黄色录像 | 波多野结衣一区二区 | 综合久久久 | 91成人在线视频 | 久久久青草 | 国产在线色 | 色播久久久 | 国产精品久久久久久一区二区三区 | 免费看黄色小视频 | 色久五月 | 欧美久久久久久 | 午夜精品久久久久久久久久久久久 | 国产精品久久久久久久久久久久冷 | 亚洲在线一区 | 国产精品免费小视频 | 欧美日韩综合一区 |