如何在JavaScript中使用支持Unicode的正则表达式?例如,应该有类似于\ w的东西可以匹配字母或标记类别中的任何代码点(不仅仅是ASCII代码),并且希望像[[P*]]这样的过滤器用于标点符号等.
试图理解现代Unicode的微妙之处让我头疼.特别是,代码点,字符,字形和字形之间的区别 - 在最简单的情况下,当使用ASCII字符处理英文文本时,所有这些概念彼此之间都存在一对一的关系 - 这给我带来了麻烦.
看看这些术语如何在像Matthias Bynens的JavaScript这样的文档中使用有一个unicode问题或Wikipedia关于Han统一的文章,我收集到这些概念不是一回事,并且将它们混淆是危险的,但我有点像努力去理解每个术语的含义.
Unicode Consortium提供了一个词汇表来解释这些东西,但它充满了"定义",如下所示:
抽象字符.用于组织,控制或表示文本数据的信息单元....
...
性格....(2)抽象字符的同义词.(3)Unicode字符编码的基本编码单位....
...
雕文.(1)表示一个或多个字形图像的抽象形式.(2)字形图像的同义词.在显示Unicode字符数据时,可以选择一个或多个字形来描绘特定字符.
...
Grapheme.(1)在特定书写系统的背景下最低限度的独特写作单位....
这些定义中的大多数都具有非常学术和正式的声音质量,但缺乏任何意义的质量,或者将定义问题推迟到另一个词汇表条目或标准部分.
因此,我寻求那些比我学得更多的人的神秘智慧.这些概念中的每一个究竟是如何彼此不同的,在什么情况下它们之间不会有一对一的关系?
如:
str = 'sdf344asfasf????3?sdfsdf'
Run Code Online (Sandbox Code Playgroud)
添加()到中文和日文字符:
strAfterConvert = 'sdfasfasf(????)3(?)sdfsdf'
Run Code Online (Sandbox Code Playgroud) 目标结构如下所示:
検索结果:100,000件
如果我使用以下正则表达式模式:
((?<!?????)(?<!??)(((?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?+|[0-9?-?]))(,|?|?)?).+((?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|[0-9?-?]).+)?)(?!??)
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我希望使用这种模式,然后是阿拉伯数字或日文汉字(中文字符)数字,以"検索结果:"和"次の"之前的所有内容取消匹配.但是,模式以某种方式匹配最多4位数而不是6位数.
换一种说法,
次の1000件
工作(意味着它不匹配任何东西),但是
次の5,0000件
给出部分匹配("0000件")
我想知道为什么最多4位数.最终想找到一种方法,使用这个正则表达式来匹配任何东西.我知道这个正则表达式有点凌乱.在此先感谢您的反馈!
我知道这应该从字符串中删除任何字符,只保留数字和英文字母。
$txtafter = preg_replace("/[^a-zA-Z 0-9]+/","",$txtbefore);
Run Code Online (Sandbox Code Playgroud)
但我希望删除任何特殊字符并保留任何语言(如阿拉伯语或日语)的任何字母。
我正在使用AWS Cognito对应用程序进行身份验证。根据AWS Cognito准则,正确的用户名应遵循以下正则表达式 [\ p {L} \ p {M} \ p {S} \ p {N} \ p {P}] + 此正则表达式是什么意思?
当我跑:
$SearchStr = "c:\programFiles\xyz"
Select-String -pattern $SearchStr -path $env:SystemRoot\win.ini
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息,指出该字符串"不是有效的正则表达式"
相比之下,它$SearchStr不包含特殊字符时工作正常.
为什么它不适用于特殊字符,如\?
regex ×3
unicode ×3
string ×2
aws-cognito ×1
city ×1
cjk ×1
javascript ×1
php ×1
powershell ×1
preg-replace ×1
python ×1
terminology ×1
utf-8 ×1