如何在JavaScript中用正则表达式匹配非英文单词?
非英文单词的正则提取方案
核心问题原因
\w 正则元字符默认仅匹配 ASCII 范围内的字母、数字和下划线(即 [a-zA-Z0-9_]),无法识别其他语言的 Unicode 字母,所以对印地语这类非英文文本无效。
解决方案:使用 Unicode 属性类
正则引擎支持 Unicode 属性的情况下,用以下方式匹配任意语言的单词:
- 通用匹配所有语言字母
使用\p{L}匹配任意 Unicode 字母(涵盖全球几乎所有语言的字符),结合+匹配一个或多个连续字母:
^(\p{L}+)
- 精准匹配特定语言脚本
如果只针对印地语(天城文脚本),可以用\p{Devanagari}精准匹配该脚本的字符,避免匹配其他语言:
^(\p{Devanagari}+)
代码示例
Python(Python 3 正则默认支持 Unicode)
import re text = "क्या आप क्लोज़अप करते हैं " result = re.match(r'^(\p{L}+)', text) print(result.group(1)) # 输出:क्या
JavaScript(需添加 u 标志启用 Unicode 模式)
const text = "क्या आप क्लोज़अप करते हैं "; const match = text.match(/^(\p{L}+)/u); console.log(match[1]); // 输出:क्या
注意事项
- 确保使用的正则引擎支持 Unicode 属性类(主流语言如 Python、JavaScript、Java、C# 均支持,部分老旧工具可能不兼容)。
- 如果目标单词包含连字符、变音符号等特殊字符,可以扩展正则,比如加入
\p{M}(匹配变音符号)、\-等,例如:^(\p{L}\p{M}*-?)+。
内容的提问来源于stack exchange,提问作者Real Noob
相关产品推荐
相关产品推荐

