Javascript exec()的returend数组的含义是什么
例如,有一个简单的正则表达式:Javascript exec()的returend数组的含义是什么,javascript,regex,Javascript,Regex,例如,有一个简单的正则表达式: var regex = /([^\\^\{^\}]+)|(\\[A-Za-z]+(\{[^}^{]*})*)|($[.]+$)|($$[.]+$$)/g; 和要检查的字符串: var text = '\\a{b}{c}{d}'; 在开关上运行函数var matched=regex.exec(text)。 返回的数组machted现在看起来像: matched =['\\a{b}{c}{d}', undefined, '\\a{b}{c}{d}', '{d}',
var regex = /([^\\^\{^\}]+)|(\\[A-Za-z]+(\{[^}^{]*})*)|($[.]+$)|($$[.]+$$)/g;
和要检查的字符串:
var text = '\\a{b}{c}{d}';
在开关上运行函数var matched=regex.exec(text)
。
返回的数组machted
现在看起来像:
matched =['\\a{b}{c}{d}', undefined, '\\a{b}{c}{d}', '{d}', undefined, undefined];
单个条目是什么意思?如何控制它们
提前谢谢 这就是工作原理
()
字符中的regex
内容中的组在返回的数组中创建元素
var regex = /([^\\^\{^\}]+)|(\\[A-Za-z]+(\{[^}^{]*})*)|($[.]+$)|($$[.]+$$)/;
regex.exec('\\a{b}{c}{d}');
//=> ["\a{b}{c}{d}", undefined, "\a{b}{c}{d}", "{d}", undefined, undefined]
结果数组包含匹配的组,其中数组的第一个元素是匹配正则表达式的整个输入
undefined
表示您的一些组没有匹配任何内容,仍然为空
您可以使用**非捕获组并避免未定义:
var regex = /(?:[^\\^\{^}]+)|(\\[A-Za-z]+(\{[^}^{]*})*)|(?:$[.]+$)|(?:$$[.]+$$)/;
regex.exec('\\a{b}{c}{d}');
//=> ["\a{b}{c}{d}", "\a{b}{c}{d}", "{d}"]
第0个元素是完全匹配的子字符串,以下元素是由捕获组匹配的子字符串
(..)
。举一个简单的例子:
/(c)|(b(.)。/.exec('abcdef')
应返回['bcd',未定义,'bc','c']
。模式是(c)
和(b(.))之间的交替<代码>“bcd”
出现在“c”
之前,因此第二个选项匹配,而第一个选项不匹配。因此,第一个捕获组(c)
未定义,因为它不匹配任何内容。第二个捕获组(b(.)
匹配“bc”
。第三个,(.)
,匹配了“c”
,让我们从一个更简单的例子开始:
var text = 'azrt12345';
var regex = /([a-z]+)|([0-9]+)/;
var matched = regex.exec(text);
/* matched = ["azrt", "azrt", undefined] */
如您所见,regexp捕获一个字母字符串或一个数字字符串。由于text
以字母字符开头,第一个捕获组有效,而不是第二个。然后,matched[0]
包含匹配的整个字符串,matched[1]
第一个捕获组(包含捕获的内容),matched[2]
第二个捕获组(未捕获任何内容,则包含未定义的)
查看此内容以了解其工作方式。但是为什么它返回{d}
而不是{a}
?因为原始字符串中没有{a}
。这怎么可能呢?@Amadan抱歉我在{b}
@Matthias:将你的正则表达式调整为var regex=/(?:[^\\{}]+)|(\\[A-Za-z]+(\{[^}{]*}))|(?:$[.]+$)/
然后您将得到[“\a{b}”、“\a{b}”、“{b}”]
它的意思与文档中所说的意思相同。读一读,你的许多逃避都是不需要的,或者说是不存在的。