Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript正则表达式类\w无法更改的技术原因是什么?_Javascript_Regex_Unicode - Fatal编程技术网

JavaScript正则表达式类\w无法更改的技术原因是什么?

JavaScript正则表达式类\w无法更改的技术原因是什么?,javascript,regex,unicode,Javascript,Regex,Unicode,当与unicode正则表达式标志u一起使用时,需要更新某些正则表达式字符类,如\w、\d、\b等(相关讨论) 在阅读该线程时,我们给出了一些非常好的参数,说明了为什么不应该对\d进行处理,其中最重要的是JavaScript不能将非ASCII数字字符强制转换为数字。但据我所知,同样的逻辑并不真正适用于\w 是否有令人信服的技术原因或边缘案例我在这里没有看到? 毕竟我们谈论的是选择加入的标志 我问这个问题的部分原因是,在我熟悉的其他语言中,可以编写一个简单的正则表达式来匹配任何unicode单词字符

当与unicode正则表达式标志
u
一起使用时,需要更新某些正则表达式字符类,如
\w
\d
\b
等(相关讨论)

在阅读该线程时,我们给出了一些非常好的参数,说明了为什么不应该对
\d
进行处理,其中最重要的是JavaScript不能将非ASCII数字字符强制转换为数字。但据我所知,同样的逻辑并不真正适用于
\w

是否有令人信服的技术原因或边缘案例我在这里没有看到? 毕竟我们谈论的是选择加入的标志


我问这个问题的部分原因是,在我熟悉的其他语言中,可以编写一个简单的正则表达式来匹配任何unicode单词字符,而在JavaScript中,基本上必须指定代码点范围。

向后兼容性不是一个技术原因吗?请特别参阅AFB的注释:“除非,如WRT\d所述,如果JS程序员仅仅因为想允许“完整Unicodee”而使用/u更新现有的regexp,他们可能还没有意识到他们正在以其他方式更改匹配的语义更改。正如Claude所说,这将导致bug。”关于这一点,人们可以同意或不同意AFB,但我不清楚你在寻找什么。unicode还包括用户不想匹配的特殊字符,如
&
。@gurvinder372
\w
与我熟悉的任何语言中的
&
都不匹配。它只匹配单词字符和下划线(与unicode无关)。@gurvinder372你看过我链接的例子了吗?你知道单词字符是什么吗
\w
在任何语言中都不匹配标点符号,除了下划线、unicode标志或no。u修饰符在其他语言中有问题,因为它会产生两种不同的结果(将字符串读取为unicode字符串和修改字符类),并且不可能总是选择所需的行为(pcre在某种程度上是可能的)。我认为一个好的折衷办法是使用两个修饰符(一个更改字符类的含义,另一个通知正则表达式引擎它必须将字符串作为unicode字符串而不是逐字节读取);为什么不能同时为这两种行为增加三分之一。向后兼容性不是一个技术原因吗?请特别参阅AFB的注释:“除非,如前所述,JS程序员使用/u更新现有regexp仅仅是因为他们想允许“完全Unicode”“他们可能还没有意识到他们正在以其他方式改变匹配的语义变化。正如Claude所说,这将导致bug。“关于这一点,人们可以同意也可以不同意AFB,但我不清楚除此之外您在寻找什么。unicode还包括用户不希望匹配的特殊字符,如
&
。@gurvinder372
\w
与我熟悉的任何语言中的
&
都不匹配。它只匹配单词字符和下划线。”(这与unicode无关)。@gurvinder372你看过我链接的示例了吗?你知道单词字符是什么吗?
\w
与标点符号不匹配,除了下划线,在任何语言中都是unicode标志或否。u修饰符在其他语言中是有问题的,因为它有两种不同的含义(将字符串读取为unicode字符串并修改字符类)并且并不总是能够选择您想要的行为(在某种程度上,pcre是可能的)。我认为一个好的折衷方法是使用两个修饰符(一个用于更改字符类的含义,另一个用于通知正则表达式引擎它必须将字符串作为unicode字符串而不是逐字节读取);为什么不同时为这两种行为设置第三个呢。