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

时间:2018-11-19 03:37:19

标签: javascript regex

我和我的朋友正在尝试解决此问题,但我们无法弄清这一点,我们发现了一些提供此错误解决方案的帖子,但我们不知道如何将其应用于我们的情况,因此基本上,代码应该用于返回所有引用

的正则表达式匹配项

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

我们希望看到从a-g到输出的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>

2 个答案:

答案 0 :(得分:1)

您需要将变量声明移至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>

答案 1 :(得分:1)

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

初始化match条件之外的while

您还需要在match = pattern.exec(string)表达式周围加上括号,以便将其与null进行正确比较,否则,您将分配pattern.exec(string) !== null的结果(即,< em> boolean )到output,这不是您想要的:

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>