答案就在
- Javascript unicode string, chinese character but no punctuation和
- How can I strip all punctuation from a string in JavaScript using regex?
我已经接近我需要的东西了:获取字符串中的所有中文标点符号。
Intl.Segmenter比String.prototype.split(" ")
好得多
但有一个问题/\p{P}/u.test(segment.segment)
测试所有的标点符号,而不仅仅是中文标点符号,所以我得到了英语标点符号,如撇号,逗号,问号和句号。
我希望我不需要解析到Chinese punctuation Unicode range?中的答案。它太复杂了。根据这个关于Chinese punctuation的维基,只有大约20个。
有什么简单的方法吗?
const str = "你好,让我们试试这个分词效果,你说怎么样?Let's try Intl.Segmenter, should we ?"
let segmenterZH = new Intl.Segmenter('zh', { granularity: 'grapheme' })
let segments = segmenterZH.segment(str)
for (let segment of segments) {
if (/\p{P}/u.test(segment.segment)) {
console.log(`${segment.index}:${segment.segment}`)
}
}
1条答案
按热度按时间mwecs4sa1#
如果您想匹配属于CJK Symbols and Punctuation集或Halfwidth and Fullwidth Forms字符集的 punctuation proper,可以使用
何处
\p{P}
-匹配任何标点符号字符(即它不匹配数学符号,如+
或=
等)(?<=[\u3000-\u303F\uFF00-\uFFEF])
-一个正向后查找,要求\p{P}
匹配的字符在\u3000-\u303F
(CJK符号和标点符号)或\uFF00-\uFFEF
(半角和全角形式)范围内。请看下面的JavaScript演示:
输出: