这就是我的所作所为:
var input_string = "(1) (1) test.txt";
var reg = new RegExp('^\\(\\d+\\)\\s+' + input_string,'i');
var tested_string = "(1) (1) (1) test.txt";
alert(reg.test(tested_string)); // returns false
我希望它返回true,但事实并非如此。我想知道,我做错了什么?
答案 0 :(得分:6)
你必须逃避所有的括号,而你却不是。将\\
添加到输入字符串上的(
将使其工作:
var input_string = "\\(1\\) \\(1\\) test.txt"; // fixed
var reg = new RegExp('^\\(\\d+\\)\\s+' + input_string,'i');
var tested_string = "(1) (1) (1) test.txt";
alert(reg.test(tested_string)); // returns true now
会起作用。
如果你需要在正则表达式中使用任意字符串,你需要逃避它们。我建议您在将其添加到RegExp
对象之前使用类似下面的函数:
function escapeRegExp(stringToGoIntoTheRegex) {
return stringToGoIntoTheRegex.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
}
在你的情况下,它可能是:
var input_string = "(1) (1) test.txt";
var reg = new RegExp('^\\(\\d+\\)\\s+' + escapeRegExp(input_string),'i'); // using it here
var tested_string = "(1) (1) (1) test.txt";
alert(reg.test(tested_string)); // returns true as expected
请参阅demo fiddle。
答案 1 :(得分:5)
因为你没有逃避使(
和)
成为捕获组的 var input_string = "\\(1\\) \\(1\\) test\\.txt";
var reg = new RegExp('^\\(\\d+\\)\\s+' + input_string,'i');
var tested_string = "(1) (1) (1) test.txt";
alert(reg.test(tested_string)); // returns false
和/* Base <= node <= node <= node
* | ^
* | ptr to last node |
* -------------------------
*/
class Node {
private:
Node* prev;
public:
explicit Node(Node* parent) : prev(parent) {
Node* foo_ptr = this;
while (foo_ptr->prev != 0) {
foo_ptr = foo_ptr->prev;
}
// foo_ptr points to Base, how can I now change Base::last?
}
};
class Base : public Node {
private:
Node* last;
public:
Base() : Node(0), last(this) {}
};
。此外,这段时间也需要进行转义,因此它与任何角色都不匹配。
Base::last
&#13;