Javascript中使用exec进行正则表达式全局匹配时的注
网络编程 2021-07-05 10:07www.168986.cn编程入门
在 Javascript 中使用 exec 进行正则表达式全局匹配时,有一个非常容易犯的错误,这是因为 exec() 在全局模式下的行为稍微有点复杂
本文就是介绍在使用 Javascript 中使用 exec 进行正则表达式全局匹配时的注意事项。
先看一下常见的用法
<script type="text/javascript">
var pattern = /http:\/\/([^\/\s]+)/;
alert(pattern.exec('http://.codebit.')); // http://.codebit.,.codebit.
alert(pattern.exec('http://YITU.')); // http://YITU.,YITU.
// 也可以直接写成 /http:\/\/([^/]+)/.exec('http://.codebit.');
</script>
接下来看一下全局模式下的诡异事件
<script type="text/javascript">
var pattern = /http:\/\/([^\/\s]+)/g; // 使用了 g 修饰符
alert(pattern.exec('http://.codebit.')); // http://.codebit.,.codebit.
alert(pattern.exec('http://YITU.')); // 并没有返回期望的 http://YITU.,YITU. ,而是返回了 null
</script>
第二个语句并没有返回期望的结果,而是返回了 null ,这是因为
在全局模式下,当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把正则表达式对象的 lastIndex 属性设置为匹配文本的一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。
狼蚁网站SEO优化是正常的全局模式下的匹配方式
<script type="text/javascript">
var pattern = /http:\/\/([^\/\s]+)/g;
var str = "CodeBit. : http://.codebit. | YITU. : http://YITU.";
var result;
while ((result = pattern.exec(str)) != null) {
alert("Result : " + result + " LastIndex : " + pattern.lastIndex);
}
//Result : http://.codebit.,.codebit. LastIndex : 34
//Result : http://YITU.,YITU. LastIndex : 67
</script>
从上面的代码我们可以看到,之所以出现第二段代码中的问题,影响因素是 lastIndex ,所以我们可以通过将 lastIndex 手动置 0 的方式来解决这个问题。
<script type="text/javascript">
var pattern = /http:\/\/([^\/\s]+)/g; // 使用了 g 修饰符
alert(pattern.exec('http://.codebit.')); // http://.codebit.,.codebit.
pattern.lastIndex = 0;
alert(pattern.exec('http://YITU.')); // http://YITU.,YITU.
</script>
在全局模式下,如果在一个字符串中完成了一次模式匹配之后要开始检索新的字符串,就必须手动地把 lastIndex 属性重置为 0。
先看一下常见的用法
代码如下:
<script type="text/javascript">
var pattern = /http:\/\/([^\/\s]+)/;
alert(pattern.exec('http://.codebit.')); // http://.codebit.,.codebit.
alert(pattern.exec('http://YITU.')); // http://YITU.,YITU.
// 也可以直接写成 /http:\/\/([^/]+)/.exec('http://.codebit.');
</script>
接下来看一下全局模式下的诡异事件
代码如下:
<script type="text/javascript">
var pattern = /http:\/\/([^\/\s]+)/g; // 使用了 g 修饰符
alert(pattern.exec('http://.codebit.')); // http://.codebit.,.codebit.
alert(pattern.exec('http://YITU.')); // 并没有返回期望的 http://YITU.,YITU. ,而是返回了 null
</script>
第二个语句并没有返回期望的结果,而是返回了 null ,这是因为
在全局模式下,当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把正则表达式对象的 lastIndex 属性设置为匹配文本的一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。
狼蚁网站SEO优化是正常的全局模式下的匹配方式
代码如下:
<script type="text/javascript">
var pattern = /http:\/\/([^\/\s]+)/g;
var str = "CodeBit. : http://.codebit. | YITU. : http://YITU.";
var result;
while ((result = pattern.exec(str)) != null) {
alert("Result : " + result + " LastIndex : " + pattern.lastIndex);
}
//Result : http://.codebit.,.codebit. LastIndex : 34
//Result : http://YITU.,YITU. LastIndex : 67
</script>
从上面的代码我们可以看到,之所以出现第二段代码中的问题,影响因素是 lastIndex ,所以我们可以通过将 lastIndex 手动置 0 的方式来解决这个问题。
代码如下:
<script type="text/javascript">
var pattern = /http:\/\/([^\/\s]+)/g; // 使用了 g 修饰符
alert(pattern.exec('http://.codebit.')); // http://.codebit.,.codebit.
pattern.lastIndex = 0;
alert(pattern.exec('http://YITU.')); // http://YITU.,YITU.
</script>
在全局模式下,如果在一个字符串中完成了一次模式匹配之后要开始检索新的字符串,就必须手动地把 lastIndex 属性重置为 0。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程