Javascript 为什么我的正则表达式有长度2?

Javascript 为什么我的正则表达式有长度2?,javascript,regex,Javascript,Regex,我编写这个正则表达式的想法是,它将匹配任何字符串的全部内容,并简单地返回整个字符串作为结果 包含胡萝卜的character类[^]要求匹配所有以anything开头的字符。*说让这种情况发生任意次数 但是,我的结果与完整字符串匹配了两次。我期待一场比赛。怎么了 var regex = /([^]*)/; var someString = "blahdy blah blah"; var result; result = regex.exec(someString); //why does thi

我编写这个正则表达式的想法是,它将匹配任何字符串的全部内容,并简单地返回整个字符串作为结果

包含胡萝卜的character类
[^]
要求匹配所有以anything开头的字符。
*
说让这种情况发生任意次数

但是,我的结果与完整字符串匹配了两次。我期待一场比赛。怎么了

var regex = /([^]*)/;
var someString = "blahdy blah blah";
var result;

result = regex.exec(someString);
//why does this have a length of 2?  I expect only 1 containing the entire string
console.log(result.length);
console.log(result);

您正在进行捕获(模式中的
()
),这意味着regex调用将返回捕获的数据(整个字符串)以及导致regex匹配的整个字符串(再次是整个字符串)。

我假设这是“exec()”的某个功能?那么,exec是否有一个设置整个字符串的公共位置?我的意思是这总是放在索引0上吗?这是我所知道的每个正则表达式引擎的一个特性,索引0总是导致匹配的字符串。索引1+是捕获组(索引1=第一个捕获组,索引2=第二个捕获组,等等)。我很惊讶这个东西居然可以编译。必须是js的东西。@FailedDev如果浏览器缺少错误控制台,它将无法工作。IE是我所知道的唯一没有浏览器的浏览器。将
console.log
替换为
document.writeln
您需要阅读
.exec()
的文档:。这里已经解释清楚了
.match()
的工作原理相同。
/.*/m
有什么问题当然,在我定义字符类时更有意义,
[]
^
从来都不是“行的开头”或类似的意思——它要么意味着字符类的否定,要么意味着文字
^
——不过,如果某种类型的正则表达式至少在某个地方偶然发现了否定的空字符类,我不会感到惊讶(比如说“不是……嗯,不是现在干什么?”),如果它不以某种方式将其解释为只匹配
^
字符的字符类。这似乎有风险,但如果您只坚持使用JavaScript,可能没有问题……可能是。。。