1.2.4 • Published 1 year ago

ant-character-js v1.2.4

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

字符处理js库

  1. 支持Emoji识别
  2. 支持子素簇边界拆分(Grapheme Cluster Boundary)

科普:关于 Emoji 你不知道的事

Emoji识别

提供了从一段字符串中识别emoji的函数,还提供了一个匹配emoji的正则表达式。它符合Unicode标准,是基于Unicode 15.0 Unicode® Technical Standard #51规则封装的。 它的大小只有3k。

子素簇边界拆分

用于对字符串进行字素簇的拆分,类似于js中的API Intl.Segmenter,但是它具有更好的兼容性。它符合Unicode标准,是基于Unicode unicode tr29:UNICODE TEXT SEGMENTATION开发的一种针对"用户感知字符"(字素簇)进行分割的方法。 它是一个纯静态的、无任何额外依赖的方法,体积很小,且不会有兼容性问题。

Installation

Via npm:

npm i ant-character-js

识别Emoji

import { hasEmoji, matchEmoji, getRegExpEmoji } from 'ant-character-js/lib/emoji.js'

// 判断一段字符串中是否有emoji
hasEmoji('123123123'); // false
hasEmoji('12312🇭🇰3123'); // true

// 匹配一段字符串中的emoji
matchEmoji('123123123'); // null
matchEmoji('12312🇭🇰3123'); // ['🇭🇰']
matchEmoji('12312🇭🇰31🇭🇰23', 'g'); // ['🇭🇰', '🇭🇰']

// 识别emoji的正则
const reg1 = getRegExpEmoji(); // 正则:/\p{emoji}/
reg1.test('😊'); // true
const reg2 = getRegExpEmoji('g'); // 正则:/\p{emoji}/g
'😊😊😊'.match(reg2); // ['😊', '😊', '😊']

子素簇边界拆分

import { graphemeSplit } from 'ant-character-js/lib/grapheme.js'

graphemeSplit('🧑🏼‍🦰❤️‍🩹🏄🏻‍♀️👨🏽‍🎤👩🏽‍🤝‍👨🏿🤙'); // returns ["🧑🏼‍🦰", "❤️‍🩹", "🏄🏻‍♀️", "👨🏽‍🎤", "👩🏽‍🤝‍👨🏿", "🤙"]

graphemeSplit('Ĺo͂řȩm̅'); // returns ["Ĺ","o͂","ř","ȩ","m̅"]

graphemeSplit('Z͑ͫ̓ͪ̂ͫ̽͏̴̙̤̞͉͚̯̞̠͍A̴̵̜̰͔ͫ͗͢L̠ͨͧͩ͘G̴̻͈͍͔̹̑͗̎̅͛́Ǫ̵̹̻̝̳͂̌̌͘!͖̬̰̙̗̿̋ͥͥ̂ͣ̐́́͜͞'); // returns ["Z͑ͫ̓ͪ̂ͫ̽͏̴̙̤̞͉͚̯̞̠͍","A̴̵̜̰͔ͫ͗͢","L̠ͨͧͩ͘","G̴̻͈͍͔̹̑͗̎̅͛́","Ǫ̵̹̻̝̳͂̌̌͘","!͖̬̰̙̗̿̋ͥͥ̂ͣ̐́́͜͞"]

// graphemeSubstr 提供针对一段字符串按照视觉长度 或者 逻辑长度进行截取的能力。
// 例子1:按照视觉长度截取一段emoji字符
graphemeSubstr('🧑🏼‍🦰❤️‍🩹🏄🏻‍♀️👨🏽‍🎤', 1, 4); // '❤️‍🩹🏄🏻‍♀️👨🏽‍🎤'
//    其中“1”表示 以视觉长度划分:从左开始第1个“视觉字符”(0是起始位置)
//    其中“4”表示 以视觉长度划分:从左开始第4个“视觉字符”

//    graphemeSubstr('🧑🏼‍🦰❤️‍🩹🏄🏻‍♀️👨🏽‍🎤', 1, 4)表示取第1-4个“视觉字符”的字符串'❤️‍🩹🏄🏻‍♀️👨🏽‍🎤'
// 例子2:按照视觉长度截取一段emoji字符,但是限制取出的字符的最大逻辑长度为13

graphemeSubstr('🧑🏼‍🦰❤️‍🩹🏄🏻‍♀️👨🏽‍🎤', 1, 4, 13) === '❤️‍🩹🏄🏻‍♀️'

//    其中“13”表示,取第1-4个“视觉字符”的字符串 同时限制取出的字符串的最大逻辑长度为13
//    例子1中 取出的'❤️‍🩹🏄🏻‍♀️👨🏽‍🎤'.length === 19, 19超过了13,所以会减掉最后一个字符👨🏽‍🎤

//    '👨🏽‍🎤'.length === 7, 所以最后取出的字符为'❤️‍🩹🏄🏻‍♀️'
//    如果'👨🏽‍🎤'.length === 5, 19 - 5 依旧大于13, 就会再减掉一个字符,以此类推。

Emoji API

getRegExpEmoji

属性说明类型默认值
modifier正则修饰符,比如: 'g'string-

hasEmoji

属性说明类型默认值
str需要检查的字符串string-

matchEmoji

属性说明类型默认值
str需要匹配的字符串string-
modifiernew RegExp的修饰符,传g的话就会匹配所有的emoji出来,不传的话只会匹配一个string-

Grapheme API

graphemeSplit

属性说明类型默认值
str需要拆分的字符串string-

graphemeSubstr

属性说明类型默认值
str需要拆分的字符串string-
start开始位置(视觉长度),必须大于0,且小于endnumber-
end结束位置(视觉长度),必须大于0,且大于startnumber-
maxLength非必填,如填写了会限制输出的最大物理长度number-

License

MIT

1.2.4

1 year ago

1.2.3

1 year ago

1.2.2

1 year ago

1.2.1

1 year ago

1.1.9

1 year ago

1.1.8

1 year ago

1.1.7

1 year ago

1.1.6

1 year ago

1.1.5

1 year ago

1.1.4

1 year ago

1.1.3

1 year ago

1.1.1

1 year ago

1.1.0

1 year ago

1.0.9

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago