Javascript 如何在正则表达式中检测带有标点符号的汉字?

Javascript 如何在正则表达式中检测带有标点符号的汉字?,javascript,php,regex,unicode,Javascript,Php,Regex,Unicode,我注意到有人问如何用正则表达式检测汉字。以下是我在stackoverflow上读到的一些问题: 以及stackoverflow之外的一些文章: -unicode脚本 基本上,他们建议使用\p{Han}+或[\x{4e00}-\x{9fa5}]+.来检测汉字。有没有办法检测中文标点符号呢 中文标点符号的一些示例(但不是全部): :?,《字符集》-(【】您要匹配的大多数字符都可以匹配: [\x{FF1F}-\x{FF2D}\x{FF01}-\x{FF1E}\x{3001}-\x{30AD}]+

我注意到有人问如何用正则表达式检测汉字。以下是我在stackoverflow上读到的一些问题:

以及stackoverflow之外的一些文章:

-unicode脚本

基本上,他们建议使用
\p{Han}+
[\x{4e00}-\x{9fa5}]+.
来检测汉字。有没有办法检测中文标点符号呢

中文标点符号的一些示例(但不是全部):
:?,《字符集》-(【】

您要匹配的大多数字符都可以匹配:

[\x{FF1F}-\x{FF2D}\x{FF01}-\x{FF1E}\x{3001}-\x{30AD}]+

我建议大家看看Python库,它提供了中文文本处理中常用的常量

幸运的是,它包含了一个非常适合您需要的正则表达式定义:

#: A regular expression pattern for a Chinese sentence. A sentence is defined
#: as a series of characters and non-stop punctuation marks followed by a stop
#: and zero or more container-closing punctuation marks (e.g. apostrophe or brackets).

sent = sentence = '[{characters}{radicals}{non_stops}]*{sentence_end}'.format(
    characters=characters, radicals=radicals, non_stops=non_stops,
    sentence_end=_sentence_end)
上述定义产生以下正则表达式*:

[〇一-鿿㐀-䶿豈-﫿
有没有办法检测中文标点符号呢

这是一个只获取标点符号的基本Unicode属性正则表达式。
它表示获取所有
\p{Han}
脚本字符,仅当它们位于CJK块中时
用于符号和标点符号

这有效地过滤了汉字符号和标点符号

从Unicode 10开始,这就是这15个字符:
〡〢〣〤〥〦〧〨〩〸〹〺〻


\p{Han}(?
[\u4e00-\u9fa5]
在VSCode中适用于我,其他建议的解决方案不适用。我在这里偶然发现了一个解决方案,它是一个在线正则表达式解释器:

所以基本上我必须手动匹配代码?我已经测试了你的正则表达式,至少有一个常见的标点符号不包括在内。你在寻找PHP解决方案吗?我以为只有正则表达式就足够了……但是如果有必要在代码中这样做(确保不是对每个标点符号进行硬编码以进行检查),php解决方案也可以。它可能不那么精确,但在这种情况下,您可能会匹配标点符号而不是ASCII标点,或者
~(?![:ASCII:][:punct:]~u
@cytsunny答案取决于使用的正则表达式的风格,因此请指定您想要的风格。@cytsunny-我可以链接到您选择的答案作为中文标点符号的定义吗?顺便说一句,它们是什么?