可以'我不能理解javascript's正则表达式有效
Can't make sense of the way javascript's regex works
为什么这个代码(这里是JSBin(:
var text = "T: 01202 870738";
var regex1 = /T: (.*)/;
var matches1 = text.match(regex1);
for(var i = 0; i < matches1.length; i++) {
log("[" + i + "]: " + matches1[i]);
}
记录此:
[0]: T: 01202 870738
[1]: 01202 870738
这个代码(注意我添加了g
选项(:
var regex2 = /T: (.*)/g;
var matches2 = text.match(regex2);
for(var i = 0; i < matches2.length; i++) {
log("[" + i + "]: " + matches2[i]);
}
记录此:
[0]: T: 01202 870738
实际上,我甚至不明白为什么第一个代码将01202 870738
记录为第二个匹配。如果/T: (.*)/
不包括T:
,那它怎么会匹配呢?
第二个是全局正则表达式,因此返回的数组是字符串中该表达式的所有匹配项的列表。第一个不是,所以它是一个组列表,就像你从exec
中得到的那样。(第0组是整个匹配,第1组是唯一带括号的…组。(
让您失望的是,使用和不使用g
标志的正则表达式会产生不同的行为。使用带有g
标记的正则表达式调用String.match
将返回String
对象中模式的所有实例的数组。例如,表达式:
"Hello World!".match(/l/g);
将返回此数组:
["l", "l", "l"]
但是,在没有g
标志的情况下调用相同的函数将返回一个数组,该数组的第一个元素是匹配的模式。此后的任何元素都将匹配括号内的每个表达式。例如,表达式:
"Hello World!".match(/(Hell)o World(!)/);
将方便地返回此阵列:
["Hello World!", "Hell", "!"]
相关文章:
- 输入元素模式属性的Javascript正则表达式在reFiddle上有效,但在页面上无效
- 正则表达式在浏览器上有效,但在Node.js中无效
- Javascript正则表达式,用于检查字符串是否为有效数字
- 以下情况的有效正则表达式是什么
- Javascript 正则表达式 - 限制有效字符的数量
- 具有少量特殊字符的字符串的有效正则表达式
- 创建包含正则表达式匹配中所有组的数组的有效解决方案
- 正则表达式和数组:最有效的方法
- 有效数据库表名称的正则表达式
- 正则表达式在字面声明时有效,但在使用新运算符和变量值声明时无效
- 改进正则表达式以匹配有效值
- 电子邮件的正则表达式允许空白空间、有效电子邮件地址和多个电子邮件地址
- 用于验证预言机编号的有效正则表达式
- 仅包含有效字符的字符串,不带正则表达式
- 正则表达式以确保有效的查询字符串
- 检查字符串末尾是否有有效的正则表达式,并返回正则表达式-的修剪字符串
- JavaScript正则表达式有效名称
- 这三个正则表达式有效吗
- 为什么不't这个正则表达式有效,并且在测试代码上运行良好
- 可以'我不能理解javascript's正则表达式有效