VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 817|回复: 4

javascript正则表达式的的标识问题

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-10 13:40:01 | 显示全部楼层 |阅读模式

<script language="javascript">
var Re = /[0-9]/;
document.write(Re.test("0"));
document.write(Re.test("0"));
document.write(Re.test("0"));
</script>

结果为true true true;


<script language="javascript">
var Re = /[0-9]/g;
document.write(Re.test("0"));
document.write(Re.test("0"));
document.write(Re.test("0"));
</script>
的结果却是true false true.

相差一个[g],为什么会这样?

谢谢!
回复

使用道具 举报

0

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-13 17:27:01 | 显示全部楼层
会出现这种结果可能是因为和test有关。test和exec每执行一次它是在字符串中移动搜索的,这里有一个lastindex属性,它被设为紧接着匹配子串的字符位置,当再次调用test时就会从lastIndex处开始执行匹配。因此第一次test它找到有一个'0',因此显示'true',当第二次使用时,它是从先前的位置出发,所以没找到,返回'false',第三次又是从头开始,因此返回是'true'.

而如果没有[g],test和exec总是会将lastIndex设为0。
回复

使用道具 举报

1

主题

7

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-2-14 23:15:01 | 显示全部楼层
会这样?
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-2-15 12:30:01 | 显示全部楼层
g为全局匹配
当一个字符在全局匹配一次后下次就不用它了
<script language="javascript">
var Re = /[0-9]/g;
document.write(Re.test("01"));
document.write(Re.test("01"));
document.write(Re.test("01"));
</script>
不加g
则每次都会从头开始匹配
所以每次都为true
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-3-5 16:15:02 | 显示全部楼层
3Q
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表