欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

javascript正则表达式中参数g(全局)的作用_javascript技巧 有大用

我们详细描述: 
1)对于表达式对象的exec方法,不加入g,则只返回第一个匹配,无论执行多少次均是如此,如果加入g,则第一次执行也返回第一个匹配,再执行第二个匹配,依次类推。例如: 

复制代码 代码如下:

var regx=/user\d/; 
var str=”user18duser2dsc”; 
var rs=regx.exec(str);//此时rs的值为{user1} 
var rs2=regx.exec(str);//此时rs的值依然是{user1} 


如果regx=/user\d/g:则rs的值为{user1},rs2的值为{user2} 

通过这个例子说明:对于exec方法,表达式加入了g,并不是说执行exec方法就可以返回所有的匹配,而是说加入了g以后,可以通过某种方式得到所有的匹配,这里的“方式”对于exec而言,就是执行这个方法即可。 
2)对于表达式对象的test方法,加入g跟不加g没有什么区别。 
3)对于String对象的match方法,不加g,也只是返回第一个匹配,一直执行match方法也总是返回第一个匹配,加入g,则一次返回所有的匹配。例如: 

复制代码 代码如下:

var regx=/user\d/; 
var str=”user1dge3user2gwe”; 
var rs=str.match(regx);//此时rs的值为{user1} 
var rs2=str.match(regx);//此时rs2的值依然为{user1} 


如果regx=/user\d/g,则rs的值为{user1,user2},rs2的值也为{user1,user2} 

4)对于string对象的replace方法,表达式不加g,则只替换第一个匹配,如果加入g,则替换所有匹配。 

5)对于String对象的split方法,加上g与不加g是一样的,即: 

复制代码 代码如下:

var sep=/user\d/; 
var array=”user1dfsfuser2dfsf”.split(sep); 


则array的值为{dfsf,dfsf},当sep=/user\d/g,返回值也是一样的。 

6)对于string对象的search方法,加不加g也是一样的。

来自  http://www.php.cn/js-tutorial-20951.html


正则全局匹配模式g修饰符的使用详解

这次给大家带来正则全局匹配模式g修饰符的使用详解,使用正则全局匹配模式g修饰符的注意事项有哪些,下面就是实战案例,一起来看一下。


正则表达式g修饰符:

g修饰符用语规定正则表达式执行全局匹配,也就是在找到第一个匹配之后仍然会继续查找。

语法结构:

构造函数方式:

1

new RegExp("regexp","g")

对象直接量方式:

/regexp/g

浏览器支持:

IE浏览器支持此元字符。
火狐浏览器支持此元字符。
谷歌浏览器支持此元字符。

实例代码:

实例一:

1

2

3

var str="this is an antzone good";

var reg=/an/;

console.log(str.match(reg));

以上代码只能够匹配第一个"an",因为并没有进行全局匹配,在第一个匹配成功之后,就不再继续匹配了。

实例二:

1

2

3

var str="this is an antzone good";

var reg=/an/g;

console.log(str.match(reg));

以上代码能够匹配到两个"an"。

下面是补充

本文章来详细介绍js中正则表达式的全局匹配模式 /g用法,代码如下:

1

2

3

4

5

6

var str = "123#abc";

var re = /abc/ig;

console.log(re.test(str)); //输出ture

console.log(re.test(str)); //输出false

console.log(re.test(str)); //输出ture

console.log(re.test(str)); //输出false

在创建正则表达式对象时如果使用了“g”标识符或者设置它了的global属性值为ture时,那么新创建的正则表达式对象将使用模式对要将要匹配的字符串进行全局匹配。在全局匹配模式下可以对指定要查找的字符串执行多次匹配。每次匹配使用当前正则对象的lastIndex属性的值作为在目标字符串中开始查找的起始位置。lastIndex属性的初始值为0,找到匹配的项后lastIndex的值被重置为匹配内容的下一个字符在字符串中的位置索引,用来标识下次执行匹配时开始查找的位置,如果找不到匹配的项lastIndex的值会被设置为0。当没有设置正则对象的全局匹配标志时lastIndex属性的值始终为0,每次执行匹配仅查找字符串中第一个匹配的项。可以通下面的代码来查看在执行匹配相应的lastIndex 属性的值,代码如下:

1

2

3

4

5

6

7

8

9

10

var str = "123#abc";

var re = /abc/ig;

console.log(re.test(str)); //输出ture

console.log(re.lastIndex); //输出7

console.log(re.test(str)); //输出false

console.log(re.lastIndex); //输出0

console.log(re.test(str)); //输出ture

console.log(re.lastIndex); //输出7

console.log(re.test(str)); //输出false

console.log(re.lastIndex); //输出0

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

正则的模式修饰符使用详解

正则表达式的.号元字符使用详解(附代码)

以上就是正则全局匹配模式g修饰符的使用详解的详细内容,更多请关注php中文网其它相关文章!

来自 http://www.php.cn/js-tutorial-390809.html


正则表达式有无g参数(全局搜索)时,test()结果的差异

有g参数的正则表达式:
var kk=//w/w/g;
var kk=new RegExp("//w//w","g");

如果正则表达式有指定g参数全局匹配 , 则每次test()是依次获得下一个匹配。举例说明:
var s="AABBCC";
var kk=/(/w/w)/g;
for(i=0;i<8;i++){
    document.write ("<br>"+kk.test(s));
}
上面的代码结果是3个true,1个false,再3个true,再1个false。
true
true

true
false
第1次test匹配AA,第2次test匹配BB,第3次test匹配CC,第4次test找不到匹配,之后又从头重新开始:
第5次同第1次,第6次同第2次,┄┄。

所以会出现test有时候true,有时候false的情况。这里的正则表达式必须是指定了g参数的
利用这一特点,可以用while循环遍历所有正则匹配:
var s="AA_123_BB_456_CC";
var kk=/((/w)/2)/g;
while(kk.test(s)){
    document.write ("<br>"+RegExp.$1);
}
得到结果:
AA
BB

CC


如果正则表达式没有g参数,则每次test都是从头开始匹配,不存在上述问题。
没有g参数的正则表达式:
var kk=//w/w/;
var kk=new RegExp(//w//w);
测试:
var s="AABBCC";
var kk=/(/w/w)/;
for(i=0;i<8;i++){
    document.write ("<br>"+kk.test(s));
}
上面的代码结果是8个true,每次都是AA匹配。
true
true

true
true

来自  https://blog.csdn.net/cuixiping/article/details/1677020?utm_source=blogxgwz6

普通分类: