JavaScript正则表达式模式中的变量有一个怪异的问题

时间:2019-05-25 09:07:50

标签: javascript

我想输入一个数字来查找,因此regexp模式必须是动态的,但是我遇到了一些奇怪的问题。

这是示例代码:

let list = `
[170] (50-20-3) Fant
[173] (50-20-3) Chi
[174] (50-20-3) Trib
[176] (50-20-3) Fant
[177] (50-20-3) Emo
[178] (50-20-3) Fa
`;

// In fact, this 'find' variable is origin by user input.
let find = 170;
let re = new RegExp("[" + find + "](.+)");
let found = list.match(re)[1];

document.write(found);

根据示例,我期望的是:

 (50-20-3) Fant

但是,我实际上得到了:

70] (50-20-3) Fant

1 个答案:

答案 0 :(得分:5)

您需要在括号中用引号引起来,因为该字符串不是正则表达式,并且通过将其转换为正则表达式,第一个带引号的qoute会转换为引号,并用括号将其引起来。

let list = `
[170] (50-20-3) Fant
[173] (50-20-3) Chi
[174] (50-20-3) Trib
[176] (50-20-3) Fant
[177] (50-20-3) Emo
[178] (50-20-3) Fa
`;


let find = 170;
let re = new RegExp("\\[" + find + "\\](.+)");
let found = list.match(re)[1];

console.log(found);

正则表达式中的方括号表示字符类。

{{1}}