繁体   English   中英

为什么我的exec出现可变错误

[英]Why am I getting variable errors with exec

我和我的朋友正在尝试解决此问题,但我们无法弄清楚,我们发现了一些文章可以提供此错误的解决方案,但我们不知道如何将其应用于我们的情况,因此基本上,代码应该返回所有正则表达式匹配指的是

document.querySelector('#output-2')。innerHTML = output;

我们希望看到从ag到输出的id =值,但是控制台说的是

Uncaught SyntaxError: Unexpected token var

并且该错误引用了这一行

while (var match = pattern.exec(string) !== null) 

那我为什么会得到这个错误?

这是我的代码

 var names= document.querySelectorAll('.name'); var text = new Array(); var strtext = ''; for (var i = 0; i < names.length; i++){ var arlength = text.length; text[arlength] = '['+names[i].getAttribute('id')+']'; } strtext = text.join(' and '); document.querySelector('#output-1').innerHTML= strtext; //Show all the regex matches var string= strtext; var pattern= /\\[(.*?)\\]/ig; var output = ""; while (var match = pattern.exec(string) !== null) { output += match[1]; } document.querySelector('#output-2').innerHTML = output; 
 <p id='a' class='name'>Adam</p> <p id='b' class='name'>Bob</p> <p id='c' class='name'>Cane</p> <p id='d' class='name'>Dan</p> <p id='e' class='name'>Ed</p> <p id='f' class='name'>Fred</p> <p id='g' class='name'>Gene</p> <p id='output-1'></p> <p id='output-2'></p> 

您需要将变量声明移到while条件之外,并使用括号覆盖默认的运算符优先级(逻辑拍子分配):

 var names= document.querySelectorAll('.name'); var text = new Array(); var strtext = ''; for (var i = 0; i < names.length; i++){ var arlength = text.length; text[arlength] = '['+names[i].getAttribute('id')+']'; } strtext = text.join(' and '); document.querySelector('#output-1').innerHTML= strtext; //Show all the regex matches var string= strtext; var pattern= /\\[(.*?)\\]/ig; var output = ""; var match; while ((match = pattern.exec(string)) !== null) { output += match[1]; } document.querySelector('#output-2').innerHTML = output; 
 <p id='a' class='name'>Adam</p> <p id='b' class='name'>Bob</p> <p id='c' class='name'>Cane</p> <p id='d' class='name'>Dan</p> <p id='e' class='name'>Ed</p> <p id='f' class='name'>Fred</p> <p id='g' class='name'>Gene</p> <p id='output-1'></p> <p id='output-2'></p> 

var表示新变量的初始化 ,并且此类初始化仅允许作为独立语句使用 -变量初始化不能解析为表达式,并且while(内部while(仅接受表达式(求值的东西)。)与表达式相反,一条语句会执行某些操作,例如初始化一个值,或执行一个if / then块)

而是在while条件之外初始化match

您还需要在match = pattern.exec(string)表达式周围加上括号,以将其正确地与null进行比较,否则,您将为pattern.exec(string) !== null (即, booleanoutput ,这不是您想要的:

 var names= document.querySelectorAll('.name'); var text = new Array(); var strtext = ''; for (var i = 0; i < names.length; i++){ var arlength = text.length; text[arlength] = '['+names[i].getAttribute('id')+']'; } strtext = text.join(' and '); document.querySelector('#output-1').innerHTML= strtext; //Show all the regex matches var string= strtext; var pattern= /\\[(.*?)\\]/ig; var output = ""; var match; while ((match = pattern.exec(string)) !== null) { output += match[1]; } document.querySelector('#output-2').innerHTML = output; 
 <p id='a' class='name'>Adam</p> <p id='b' class='name'>Bob</p> <p id='c' class='name'>Cane</p> <p id='d' class='name'>Dan</p> <p id='e' class='name'>Ed</p> <p id='f' class='name'>Fred</p> <p id='g' class='name'>Gene</p> <p id='output-1'></p> <p id='output-2'></p> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM