javascript - 有人可以解释以下 javascript

标签 javascript regex

var td = /^(?:(\w+)\.)?(?:(\w+):)?(\w+)$/
var b = td.exec("test");
alert(b);

结果是 ....test,,,test 或者你可以说一个长度为 4 的数组,数组的第一个和最后一个元素是字符串本身,但中间两个元素是空的。

最佳答案

您的正则表达式 /^(?:(\w+)\.)?(?:(\w+):)?(\w+)$/ 表示:

/           : regex delimiter
  ^         : start of string
    (?:     : start NON capture group
      (     : start capture group 1
        \w+ : 1 or more letter, digit or _
      )     : end group 1
      \.    : a dot
    )?      : end non capture group, optional
    (?:     : start NON capture group
      (     : start capture group 2
        \w+ : 1 or more letter, digit or _
      )     : end group 2
      :     : column
    )?      : end non capture group, optional
    (       : start capture group 3
      \w+   : 1 or more letter, digit or _
    )       : end group 3
  $         : end of string
/           : regex delimiter

您可以看到您有 3 个捕获组。

对于test这个词,第一组是空的,因为test后面没有点;第二组也是空的,因为在 test 之后没有 :;只有第三组包含 test

var b = td.exec("test"); 的结果是一个数组,其中第一个元素 b[0] 你会找到整个匹配(即test),则b[1]b[2]分别包含空的第一组和第二组; b[3] 包含第三组,即 test

这就是为什么你的结果数组是

['test', '', '', 'test']
 |       |   |   third group
 |       |   second group
 |       first group
 whole match

关于javascript - 有人可以解释以下 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42578601/

相关文章:

javascript - 如何找到两个 JavaScript 对象数组之间的差异?

php - 字符串的正则表达式看起来像 PHP 中的 javascript 对象

css - 修改此 CSS 掩码方法以允许用户仅输入 -9999999 到 9999999 之间的值

Ruby 正则表达式不忽略空格

javascript - 无法使用 Ionic 的媒体插件在音频文件中创建语音消息

javascript - NodeJS 值不正确

c - grep C 类型定义的正则表达式

java模式获取带扩展名的页面名

Javascript 密码生成器添加空格并导致测试失败

javascript - 如何为特定节点编写条件 xpath 选择?