【发布时间】:2017-09-09 17:32:22
【问题描述】:
我确定这是一个非常基本的问题,但我已经寻找了很多答案,但还是找不到。
我要做的就是查看数组中的元素是否匹配}(即右大括号)。但这不起作用:line === '}'。
我可以使用line.match(/^\}$/)(我正在这样做)。
猜想这与大括号是特殊字符有关,但如果它们用引号引起来,那又有什么关系呢?为什么我不能只引用一个标点符号?
更新:呃,对不起,我不知道这是怎么发生的。我向上帝发誓,我在发布之前仔细测试了它,但现在我的代码可以在 line == "}"、line === "}"、line == '}' 和 line === '}' 上正常工作。在我的轻微辩护中,我唯一可以说的是,我在函数中遇到了多个问题,我认为这仍然是一个问题。不是。问题都在其他地方。
更新 2:既然人们在问,这里是周围的功能。其目的是遍历包含 JavaScript 文件行的数组,并复制传递函数的文本。该代码假定一个函数在发现“}”时复制结束......这就是我测试它的原因。调用此代码时,我不断收到undefined,当我切换到正则表达式时,我确实让它工作了。但显然我在尝试使用正则表达式的同时解决了这个问题。教训是认真地测试,一次只尝试一件事:
// Return an array containing the text of the input function.
function load_function_text(funShun) {
// Iterate through the present JS file's text.
var line_num = 0; // Track line num so you can grab the previous line.
var current_function = [];
var copying_lines = false;
this_file.forEach(function(line) {
// Start copying when 'function funShun' is spotted. (Start pushing from previous line.)
if (line.match("function " + funShun)) {
current_function.push(this_file[line_num - 1]);
current_function.push(line);
copying_lines = true;
line_num += 1;
// Stop copying and return when '}' is spotted.
} else if (copying_lines && line === "}") {
// Add this line.
current_function.push(line);
// Stop copying when end of function is reached.
copying_lines = false;
} else {
if (copying_lines) current_function.push(line);
line_num += 1;
}
});
return current_function;
}
更新 3:事实证明我最初的问题实际上是合法的。然而,这是一个 Windows 换行问题。在准备迭代的this_file 数组的Ajax 处理函数中,我将responseText 拆分为\n;但是 .js 文件是在 Windows 中创建的,所以它的换行符都是\r\n。啊!
这就是为什么我的控制台报告整行是},但实际上,我正在使用的整行是}\r。我从来没有匹配过,所以line.match(/^}$/) 可能是真的,而 `line === '}' 可能是假的!结果,我想要为真的某个条件总是为假,所以脚本总是复制到文件的末尾,而不是在我想要复制的位的末尾停止。 (这是点击“查看”时弹出的代码。)
我一开始在“\r\n”上进行拆分,它就在 Windows 中完美运行。然后我发现它在 Heroku 上不起作用,所以我想出了如何做得更好:this_file = xhr.responseText.match(/[^\r?\n]+/g);。
Heroku here,repo here。感谢您的耐心等待。
【问题讨论】:
-
您能给我们看一个更完整的代码示例吗? (见minimal reproducible example)
-
@anomeric 无需在字符串中转义该字符。
-
为了娱乐和运动,试试
line.trim() === "}"(但是正则表达式也不应该工作) ? -
同样,无法复制-> jsfiddle.net/mq58bxth
-
line === '}'工作得很好。
标签: javascript regex punctuation