字符 class 中的单词字符如何解释?
How word character is interpreted in character class?
\w
- 代表 [A-Za-z0-9_]
Character class
但我无法理解它在字符内部的解释方式 class。
所以当我使用
[\w-~]
let test = (str) => /^[\w-~]+$/.test(str)
console.log(test("T|"))
T|
失败
但是当我使用
[A-Za-z0-9_-~]
let test = (str) => /^[A-Za-z0-9_-~]+$/.test(str)
console.log(test("T|"))
结果为真,
我无法理解这两个表达方式有何不同?
我认为您的两个示例之间的主要区别在于您的 - 字符的位置。这里发生的是在这个例子中:
let test = (str) => /^[A-Za-z0-9_-~]+$/.test(str)
console.log(test("T|"))
它被评估为一个范围,像这样:
let test = (str) => /^[_-~]+$/.test(str)
console.log(test("|"))
将 return 正确.
这其中的位置:
let test = (str) => /^[\w-~]+$/.test(str)
console.log(test("T|"))
由于 \w 本身就是一组字符,因此它正在评估字符 - 本身。
- 及其周围的位置会对其解释产生巨大影响。
您可以完全避免这种情况,只需将其移至末尾,如下所示:
let test = (str) => /^[A-Za-z0-9_~-]+$/.test(str)
console.log(test("T|"))
这将 return false
我想当你使用 ^[A-Za-z0-9_-~]+$
时,range 正在做这里的所有事情
_-~
匹配 _(索引 95)和 ~(索引 126)(区分大小写)之间范围内的单个字符,这就是为什么 T|
得到匹配而 returns true
但是当你使用 ^[\w-~]+$
时,它不会形成任何 范围 的字符,如 _-~
来匹配所以它失败并且 returns false
另请参见 ^[A-Za-z0-9-~]+$
returns false
因为它不包含 _
字符以在 _
之间形成范围 _-~
(索引 95)和 ~
(索引 126)
let test = (str) => /^[A-Za-z0-9-~]+$/.test(str)
console.log(test("T|"))
参见https://regex101.com/r/vbLN9L/5此处的说明部分。
\w
- 代表 [A-Za-z0-9_]
Character class
但我无法理解它在字符内部的解释方式 class。
所以当我使用
[\w-~]
let test = (str) => /^[\w-~]+$/.test(str)
console.log(test("T|"))
T|
但是当我使用
[A-Za-z0-9_-~]
let test = (str) => /^[A-Za-z0-9_-~]+$/.test(str)
console.log(test("T|"))
结果为真,
我无法理解这两个表达方式有何不同?
我认为您的两个示例之间的主要区别在于您的 - 字符的位置。这里发生的是在这个例子中:
let test = (str) => /^[A-Za-z0-9_-~]+$/.test(str)
console.log(test("T|"))
它被评估为一个范围,像这样:
let test = (str) => /^[_-~]+$/.test(str)
console.log(test("|"))
将 return 正确.
这其中的位置:
let test = (str) => /^[\w-~]+$/.test(str)
console.log(test("T|"))
由于 \w 本身就是一组字符,因此它正在评估字符 - 本身。
- 及其周围的位置会对其解释产生巨大影响。
您可以完全避免这种情况,只需将其移至末尾,如下所示:
let test = (str) => /^[A-Za-z0-9_~-]+$/.test(str)
console.log(test("T|"))
这将 return false
我想当你使用 ^[A-Za-z0-9_-~]+$
_-~
匹配 _(索引 95)和 ~(索引 126)(区分大小写)之间范围内的单个字符,这就是为什么 T|
得到匹配而 returns true
但是当你使用 ^[\w-~]+$
时,它不会形成任何 范围 的字符,如 _-~
来匹配所以它失败并且 returns false
另请参见 ^[A-Za-z0-9-~]+$
returns false
因为它不包含 _
字符以在 _
之间形成范围 _-~
(索引 95)和 ~
(索引 126)
let test = (str) => /^[A-Za-z0-9-~]+$/.test(str)
console.log(test("T|"))
参见https://regex101.com/r/vbLN9L/5此处的说明部分。