我想在Javascript中对正则表达式提供一些帮助。
我正在尝试匹配任何只包含Basic Latin(ASCII)字符或仅包含希腊Unicode字符的字符串。不允许这两组中带有混合字符的字符串。
我有这个正则表达式匹配完全相反的(所有包含至少一个希腊语和一个拉丁字符的字符串),但找不到否定这个的方法:
https://regex101.com/r/JHzmhc/1
提前致谢。
答案 0 :(得分:3)
您可以使用
^(?:[\u0000-\u007F]+|[\u0370-\u03FF]+)$
请参阅regex demo
<强>详情:
^
- 字符串开头(?:
- 启动非捕获组(以便锚点可以应用于两个替换组):
[\u0000-\u007F]+
- 1+ ASCII字符|
- 或[\u0370-\u03FF]+
- 1+希腊字符)
- 小组结尾$
- 字符串结束。答案 1 :(得分:2)
Wiktor’s solution具有正确的通用格式。遗憾的是,匹配希腊符号并不像[\u0370-\u03FF]
那么简单 - 这样就错过了很多希腊符号。
使用Unicode property escapes in regular expressions,您可以:
/^(?:[\0-\x7F\p]+|\p{Script_Extensions=Greek}+)$/u
在ECMAScript中正式支持Unicode属性转义并在任何地方实施之前,我们可以transpile将其转换为:
/^(?:[\0-\x7F]+|(?:[\u0342\u0345\u0370-\u0373\u0375-\u0377\u037A-\u037D\u037F\u0384\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03E1\u03F0-\u03FF\u1D26-\u1D2A\u1D5D-\u1D61\u1D66-\u1D6A\u1DBF-\u1DC1\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FC4\u1FC6-\u1FD3\u1FD6-\u1FDB\u1FDD-\u1FEF\u1FF2-\u1FF4\u1FF6-\u1FFE\u2126\uAB65]|\uD800[\uDD40-\uDD8E\uDDA0]|\uD834[\uDE00-\uDE45])+)$/