var td = /^(?:(\w+)\.)?(?:(\w+):)?(\w+)$/
var b = td.exec("test");
alert(b);
结果是.... test ,,,测试或者你可以说一个长度为4的数组,数组的第一个和最后一个元素是字符串本身但中间的两个元素是空的。
答案 0 :(得分:1)
这是一个正则表达式(正则表达式)。它们可能非常混乱且难以阅读。您可以在https://regex101.com/中添加正则表达式,将其翻译为人类可读的。这将让您了解它的作用。
答案 1 :(得分:1)
您的正则表达式/^(?:(\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]
和{{ 1}}分别包含空的第一组和第二组; b[2]
包含第三个b[3]
组。
这就是你得到的数组
的原因test
答案 2 :(得分:0)
\ w +搜索Word以便"测试"将被发现。 exec()将所有内容放在数组中。 这就是我能从中看到的全部内容。
答案 3 :(得分:0)
@Simple,它不是那么简单的正则表达式(/^(?:(\w+)\.)?(?:(\w+):)?(\w+)$/
)
?:
=>非捕获正则表达式组
让我为你打破它:
/^(?:(\w+)\.)?(?:(\w+):)?(\w+)$/
^
字符串的开头(?:(\w+)\.)?
:?
)\w+
) - 只会被捕获\.
)?
结尾)(?:(\w+):)?
:?
)\w+
) - 只会被捕获:
)?
结尾)(\w+)
\w+
) - 它将被捕获$
在这里,让我向您展示test
如何为一些快速示例字符串执行:
"lorem.ipusm:red"
匹配:lorem.ipusm:red
小组:[lorem, ipsum, red]
"ipusm:red"
匹配:ipusm:red
小组:[ipsum, red]
"red
匹配:red
小组:[red]
"
不是上述字符串的一部分。它只是为了代表 串
答案 4 :(得分:0)
你有正则表达式有三个部分 -
(?:(\w+)\.)?
- 它的意思是零个或多个单词字符和.
(例如e_123.
)。所有这一部分可以是零次或一次。 (?:(\w+)\.)?
- 和第一个一样。(\w+)
- 它的意思是零个或多个单词字符。只是第一部分匹配字符串的任何charctar。
Exec函数返回一个数组。第一个是匹配文本,其他是捕获组。
所以你有匹配字符串" test",两个捕获组包含空字符串,最后一个匹配组" test。
结果是 - ["test", undefined, undefined, "test"]
。
(我对我的英语很抱歉......)