我和我的朋友正在尝试解决此问题,但我们无法弄清这一点,我们发现了一些提供此错误解决方案的帖子,但我们不知道如何将其应用于我们的情况,因此基本上,代码应该用于返回所有引用
的正则表达式匹配项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>
答案 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>