JavaScript 正则表达式模式与变量连接

IT技术 javascript regex
2021-01-30 16:02:02

如何创建与变量连接的正则表达式模式,如下所示:

var test ="52";
var re = new RegExp("/\b"+test+"\b/"); 
alert('51,52,53'.match(re));

谢谢

3个回答
var re = new RegExp("/\b"+test+"\b/"); 

\b在字符串文字中是一个退格字符。将正则表达式放入字符串文字时,您需要再进行一轮转义:

var re = new RegExp("\\b"+test+"\\b"); 

//在这种情况下您也不需要。)

正是我要找的。关于的部分When putting a regex in a string literal you need one more round of escaping是否有任何有关(原因)的背景信息?
2021-03-17 16:02:02
您仍然需要转义反斜杠。单引号与 JavaScript 中的双引号没有不同的转义规则(与 PHP 不同)。
2021-04-03 16:02:02
当尝试在具有 .match() 和 .replace() JS 正则表达式函数的变量上使用边界运算符时,此答案也解决了相同的问题。
2021-04-06 16:02:02
另一种方法是为了清楚起见使用单引号,这样您就不需要转义反斜杠: new RegExp('\b'+test+'\b');
2021-04-09 16:02:02
有很多地方可以使用或不使用内置类型的构造函数new但是,为了与其他可能不正确的对象保持一致,以及总体上的清晰度,我将始终使用new.
2021-04-11 16:02:02

使用 ES2015(又名 ES6),您可以在构造RegExp使用模板文字

let test = '53'
const regexp = new RegExp(`\\b${test}\\b`, 'gi') // showing how to pass optional flags
console.log('51, 52, 53, 54'.match(regexp))

错字:Regexp 必须是 RegExp
2021-04-13 16:02:02

您可以使用

/(^|,)52(,|$)/.test('51,52,53')

但我建议使用

var list = '51,52,53';
function test2(list, test){
    return !((","+list+",").indexOf(","+test+",") === -1)
}
alert( test2(list,52) )