国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

你可能不知道的字符串分割技巧

開發 前端
Intl.Segmenter 是一個 JavaScript 對象,用于對文本進行區域設置敏感的分段。它可以幫助我們從字符串中提取有意義的項目,如單詞、句子或字形。

最近看到一個拆分字符串的新方式,就是使用Intl.Segmenter將emoji字符串分割成字形的方法。

我以前都沒用過這個Intl對象,現在我們一起來看看。

假設你想把用戶輸入拆分成句子,看起來是一個簡單的 split() 任務...但這個問題有很多細微之處。

'Hello! How are you?'.split(/[.!?]/);
// ['Hello', ' How are you', '']

使用 split() 會丟失定義的分隔符,并在所有地方包含這些空格。而且因為它依賴于硬編碼的分隔符,所以對語言不敏感。

我不懂日語,但你會如何嘗試將下面的字符串分割成單詞或句子?

// I am a cat. My name is Tanuki.
'吾輩は貓である。名前はたぬき。'

普通的字符串方法在這里是沒有用的,但是Intl JavaScript API 確能解決這個問題。

Intl.Segmenter 來救場

Intl.Segmenter 是一個 JavaScript 對象,用于對文本進行區域設置敏感的分段。它可以幫助我們從字符串中提取有意義的項目,如單詞、句子或字形。它的使用方式類似于其他的構造函數,可以使用 new 關鍵字來創建一個 Intl.Segmenter 對象。

const segmenter = new Intl.Segmenter(locale, { granularity: "word" });

在上面的代碼中,locale 是字符串,表示要使用的區域設置。granularity 是字符串,表示分段的粒度。它可以是 "grapheme"(字形)、"word"(單詞)或 "sentence"(句子)之一。

圖片

Intl.Segmenter 有一個很有用的方法叫做 segment(),它可以將文本拆分為有意義的段。

const segments = segmenter.segment(text);

在上面的代碼中,text 是要拆分的文本,segments 是返回的段的迭代器。你可以使用 for-of 循環來遍歷段,或者使用 Array.from() 將它們轉換為數組。

const text = "Hello, world! How are you today?";
const segmenter = new Intl.Segmenter("en-US", { granularity: "sentence" });
const segments = segmenter.segment(text);

for (const segment of segments) {
console.log(segment);
}

// Output:
// { index: 0, value: "Hello, world!", breakType: "", breakIndex: 12 }
// { index: 13, value: "How are you today?", breakType: "", breakIndex: 31 }

Intl.Segmenter 對象還有其他一些有用的方法,比如 breakType,用于檢索分段的類型(例如,句子的末尾是否包含句號)。另一個有用的方法是 breakType,用于檢索分段的類型。

例如:

const text = "Hello, world! How are you today?";
const segmenter = new Intl.Segmenter("en-US", { granularity: "sentence" });
const segments = segmenter.segment(text);

for (const segment of segments) {
console.log(segment.breakType);
}

// Output:
// "exclamation"
// "question"

Intl.Segmenter 還有一個很有用的靜態方法叫做 supportedLocalesOf(),它可以幫助你確定瀏覽器是否支持特定的區域設置。

const supported = Intl.Segmenter.supportedLocalesOf(["en-US", "zh-CN"]);
console.log(supported);

// Output:
// ['en-US', 'zh-CN']

在上面的代碼中,supported 數組包含瀏覽器支持的區域設置。

如果你想要對文本進行更細粒度的分段,你可以使用 Intl.ListFormat 對象。它可以幫助你將文本拆分為有意義的列表項。

使用方式類似于 Intl.Segmenter,你可以使用 new 關鍵字創建一個 Intl.ListFormat 對象。

const listFormat = new Intl.ListFormat(locale, { style: "long", type: "conjunction" });

在上面的代碼中,locale 是字符串,表示要使用的區域設置。style 和 type 是對象的屬性,用于指定列表格式。style 可以是 "long" 或 "short",type 可以是 "conjunction"(并列)或 "disjunction"(或)。

Intl.ListFormat 有一個很有用的方法叫做 format(),它可以將數組轉換為有意義的列表。

const list = ["apple", "banana", "orange"];
const formatted = listFormat.format(list);
console.log(formatted);

// Output:
// "apple, banana, and orange"

在上面的代碼中,formatted 是轉換后的列表字符串。

Word 的顆粒度帶有一個額外的isWordLike屬性

如果把一個字符串分割成單詞,所有的片段都包括空格和換行符。使用isWordLike屬性將它們過濾掉。

const segmenterDe = new Intl.Segmenter('de', {
granularity: 'word'
});
const segmentsDe = segmenterDe.segment('Was geht ab?');

console.log([...segmentsDe]);
// [
// { segment: 'Was', index: 0, input: 'Was geht ab?', isWordLike: true },
// { segment: ' ', index: 3, input: 'Was geht ab?', isWordLike: false },
// ...
// ]

console.log([...segmentsDe].filter(s => s.isWordLike));
// [
// { segment: 'Was', index: 0, input: 'Was geht ab?', isWordLike: true},
// { segment: 'geht', index: 4, input: 'Was geht ab?', isWordLike: true },
// { segment: 'ab', index: 9, input: 'Was geht ab?', isWordLike: true }
// ]

上面通過isWordLike進行過濾會刪除標點符號,如.、-、或?。

使用 Intl.Segmenter 來分割 emojis

如果你想把一個字符串分割成可視化的emojis,Intl.Segmenter也是一個很好的幫助。

const emojis = '???????????????';

// ----
// Split by code units
console.log(emojis.split(''));
// ['\uD83E', '\uDEE3', '\uD83E', '\uDEF5', '\uD83D', '\uDE48']

// ----
// Split by code points
console.log([...emojis]);
// ['??', '??', '??', '?', '??', '?', '??', '?', '??']

// ----
// Split by graphemes
const segmenter = new Intl.Segmenter('en', {
granularity: 'grapheme'
});
const segments = segmenter.segment(emojis);

console.log(Array.from(
segmenter.segment(emojis),
s => s.segment
));
// ['??', '??', '???????????']

請注意,字形也包括空格和 "正常 "字符。

編輯中可能存在的bug沒法實時知道,事后為了解決這些bug,花了大量的時間進行log 調試,這邊順便給大家推薦一個好用的BUG監控工具 Fundebug。

參考

原文:https://www.stefanjudis.com/today-i-learned/how-to-split-javascript-strings-with-intl-segmenter/

最后

本文譯自:https://marmelab.com/blog/2022/09/20/react-i-love-you.html

責任編輯:武曉燕 來源: 大遷世界
相關推薦

2022-12-09 15:06:26

字符串Intl字符串分割

2021-01-05 11:22:58

Python字符串代碼

2020-01-29 19:40:36

Python美好,一直在身邊Line

2015-08-13 09:03:14

調試技巧

2012-11-23 10:57:44

Shell

2024-03-04 00:00:00

Kubernetes技巧API

2022-09-20 11:58:27

NpmNode.js

2023-02-27 09:20:24

絕對定位CSS

2023-01-29 09:46:47

Dialog彈窗模態

2017-02-23 19:42:55

AS Android代碼

2017-11-07 21:58:25

前端JavaScript調試技巧

2020-11-03 09:51:04

JavaScript開發 技巧

2021-02-28 08:34:14

CSS outline-off負值技巧

2019-11-20 10:25:06

sudoLinux

2021-02-16 09:02:59

Python代碼技巧

2021-02-21 06:36:57

運算技巧按位

2021-07-12 07:59:06

安全 HTML 屬性

2019-11-25 14:05:47

Python裝飾器數據

2014-12-08 10:39:15

2014-04-10 13:15:54

PythonPython技巧
點贊
收藏

51CTO技術棧公眾號

17c丨国产丨精品视频| 精品日韩99亚洲| 久久久久综合一区二区三区| 国产私拍福利精品视频二区| 一区二区在线电影| 宅男av一区二区三区| 国产亚洲电影| 最近2019中文字幕第三页视频 | 三级理论午夜在线观看| 成人动漫一区二区在线| 国产高清自拍99| 色婷婷av一区二区三区丝袜美腿 | 在线观看免费播放网址成人| 久久国产麻豆精品| 成人免费在线看片| 蜜桃a∨噜噜一区二区三区| 日韩有码在线播放| 天天综合av| 欧美日韩国产片| 亚洲精品少妇久久久久久| 国产人久久人人人人爽| 2022中文字幕| 欧美bbbbb| 久久亚洲综合网| 激情久久婷婷| 91手机视频在线观看| 国产精品三级美女白浆呻吟| 欧美日韩亚洲精品一区二区三区| 亚洲午夜精品久久| 日韩图片一区| 国产高清精品一区二区三区| 98精品久久久久久久| 国产98色在线| 国产欧美日韩伦理| 97碰碰碰免费公开在线视频| 久久亚洲欧美国产精品乐播 | 偷拍自拍亚洲色图| 欧美成人激情图片网| 成人黄色图片网站| 亚洲网站在线播放| 91欧美精品| 日韩中文字幕在线播放| www.久久.com| 日韩最新在线视频| 免费观看性欧美大片无片| 久久99热这里只有精品国产| 成人精品视频在线观看| 精品自在线视频| 免费久久久久久久久| 国产在线视频不卡| 精品二区视频| 亚洲 国产 欧美一区| 久久国产精品72免费观看| 青草全福视在线| 91免费视频网址| 日日干夜夜操s8| 无吗不卡中文字幕| 草莓福利社区在线| 亚洲人成在线观看网站高清| 久久伊人久久| 国产伊人精品在线| 免费美女久久99| 欧美 日韩 国产在线观看| 自拍偷拍亚洲欧美日韩| 牛牛澡牛牛爽一区二区| 精品av久久707| 久久免费福利| 97免费高清电视剧观看| 精品一区二区三区免费观看| 污污视频网站免费观看| 99精品一区二区三区| 草草草视频在线观看| 99re这里只有精品6| 九色porny自拍| 欧美性猛交xxxx偷拍洗澡| 污片在线免费观看| 日韩视频欧美视频| 日韩视频在线观看| 亚洲图色在线| 综合色天天鬼久久鬼色| 国产高清在线| 中文字幕久久亚洲| 清纯唯美日韩| 一区二区三区四区欧美| 日本一区二区三区四区在线视频 | 亚洲人成五月天| 91香蕉亚洲精品| gogo在线观看| 色琪琪综合男人的天堂aⅴ视频| 国产另类在线| 久久99国产精品99久久| 国产精品中文字幕欧美| 中文字幕4区| 亚洲福利视频专区| 国产精品45p| 亚洲精品成人a8198a| 久久精品人人爽人人爽| 亚洲xxxxxx| 欧美肥婆姓交大片| 亚洲精品麻豆| 热久久精品国产| 91精品国产综合久久久久久| 欧美.com| 欧美一级片免费观看| 亚洲日本在线看| 伊人网在线播放| 亚洲aⅴ日韩av电影在线观看| 国产.欧美.日韩| 福利成人在线观看| 亚州精品天堂中文字幕| 免费一级欧美片在线观看| 超碰在线中文| 精品国产欧美一区二区五十路| 很黄很黄激情成人| 国产激情视频网址| 精品区一区二区| 禁断一区二区三区在线| 国产美女作爱全过程免费视频| 色综合咪咪久久| 国产精品自在| 五月天综合婷婷| 色www精品视频在线观看| 国产美女撒尿一区二区| 成人小视频在线观看免费| 91精品蜜臀在线一区尤物| 日韩综合一区| 国产色视频网站| 久久久国产影院| 毛片不卡一区二区| 免费看a在线观看| 欧美日韩岛国| 向日葵污视频在线观看| 一区二区三区视频免费| 亚洲成a人片| 九色91视频| 都市激情亚洲色图| 啪啪国产精品| 美女网站视频黄色| 日韩中文字幕亚洲| 国产精品中文字幕日韩精品 | 日本a在线天堂| 欧美一级搡bbbb搡bbbb| 欧美另类视频| 国产美女在线播放| 国产成人精品av在线| 中文字幕亚洲在| 精品人人人人| 国产三级国产精品国产专区50| 中文字幕日韩在线观看| 国产一区二区精品久久91| 51av在线| 亚洲欧美日韩精品在线| 亚洲国产精品成人精品| 美国一区二区三区在线播放| 深夜国产在线播放| 亚洲日本一区二区三区在线不卡| 精品日韩一区二区| 麻豆精品在线播放| 一区一区三区| 男女日批视频在线观看| 这里只有精品在线播放| 91蜜桃免费观看视频| 激情视频亚洲| 亚洲老女人av| 日韩美女视频在线观看| 午夜视频在线观看一区二区 | 国产一区二区视频免费在线观看| 国产亚洲xxx| 成人手机电影网| 奇米一区二区| 大色综合视频网站在线播放| 福利视频一二区| 插插插亚洲综合网| 国产精品欧美极品| 日韩免费电影在线观看| 最新中文字幕在线视频| 国产精品久久久久av福利动漫| 欧美一区二区在线视频| 狠狠色丁香久久婷婷综| 精品三级国产| 亚洲人性生活视频| 日韩国产精品一区二区| 中国人与牲禽动交精品| 亚洲人成亚洲人成在线观看图片 | 国产剧情演绎av| 91免费的视频在线播放| 在线观看91av| 国产成人精品影视| 日韩视频一二区| 中文有码在线观看| 日韩一区二区三区资源| 亚洲一区二区福利| 亚洲视频狠狠干| 亚洲国产美女 | av片在线观看免费| 男人天堂av片| 国产成人综合久久| 欧美一区二区精品久久911| 不卡视频一二三| 日韩欧美国产精品综合嫩v|