javascript使用正则表达式的exec循环匹配时导致死循环,示例:while (regx.exec(codeStr)) !== null)出现死循环
时间: 2024-02-23 15:01:53 浏览: 133
出现死循环的原因是每次调用 `exec()` 方法时,正则表达式的 `lastIndex` 属性都会被更新,而在每次匹配失败时,它的值不会被重置为0,导致下一次匹配时从上一次匹配的位置继续向后查找,从而陷入死循环。解决方法是在每次匹配失败时手动将 `lastIndex` 的值重置为0,例如:
```
let regx = /pattern/g;
let result;
while ((result = regx.exec(codeStr)) !== null) {
// 匹配成功的处理逻辑
// ...
// 重置 lastIndex
regx.lastIndex = 0;
}
```
这样,每次匹配失败后 `lastIndex` 的值都会被重置为0,下一次匹配就会从字符串的起始位置开始。
相关问题
#include <REGX51.H> sbit nbg=P3_3; sbit nby=P3_4; sbit nbr=P3_5; sbit dxg=P3_6; sbit dxy=P3_7; sbit dxr=P3_8; void main() { nbg=0; }正确吗
这段代码的正确性取决于您的硬件电路和具体的需求。从代码中可以看出,它使用了 8051 微控制器的寄存器定义,对 P3 口的 3、4、5、6、7、8 引脚进行了控制。
其中 `sbit` 用于定义单个引脚,`1` 表示高电平,`0` 表示低电平。根据代码,它将 nbg 引脚设为低电平,其余引脚没有进行设置。
因此,如果您的硬件电路需要将 nbg 引脚设为低电平,则这段代码在这方面是正确的。但如果您的需求不同,那么这段代码就需要进行相应的修改。
注释下面代码#include <REGX52.H> sbit wx = P2^7; sbit dx = P2^6; sbit LED0 = P1^0; unsigned char code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71}; void delay(unsigned int i) { unsigned int j,k; for(j=i; j>0; j--) for(k=114; k>0; k--); } void SMG_Display(unsigned char c) { P0 = table[c]; dx = 1; dx = 0; P0 = 0x7F; wx = 1; wx = 0; } void main() { IT0=0; EX0=1; IT1=0; EX1=1; EA=1; while(1) P3=0x0F; } void INT0_Key() interrupt 0 { unsigned char key,temp; EA=0; P3 = 0xFB; temp = P3; if(temp != 0xFB) { delay(50); temp = P3; if(temp != 0xFB) { switch(temp) { case 0xEB: key = 8; break; case 0xDB: key = 9; break; case 0xBB: key = 10; break; case 0x7B: key = 11; break; } SMG_Display(key); } } P3=0x0F; EA=1; } void INT1_Key() interrupt 2 { unsigned char key,temp; EA=0; P3 = 0xF7; temp = P3; if(temp != 0xF7) { delay(50); if(temp != 0xF7) { temp = P3; switch(temp) { case 0xE7: key = 12; break; case 0xD7: key = 13; break; case 0xB7: key = 14; break; case 0x77: key = 15; break; } SMG_Display(key); } } P3=0x0F; EA=1; }
这段代码是8051单片机的程序,主要实现了一个简单的数码管显示数字的功能,同时实现了对外部中断0和中断1的响应。其中,sbit关键字表示声明一个单片机的引脚,LED0表示P1口的第0个引脚,wx和dx分别表示P2口的第7和第6个引脚。code关键字表示声明一个常量数组,table数组存储了数码管显示0~F的编码。delay函数实现延时,SMG_Display函数实现了数码管的显示,INT0_Key和INT1_Key函数分别响应了外部中断0和中断1,实现了按键的检测和数字的显示。整个程序的执行流程是在主函数while循环中,不断读取P3口的值,等待外部中断的触发。
阅读全文