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


92

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

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

谢谢

Answers:


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

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

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

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


16
内置类型的构造函数可以在很多地方使用,也可以不使用new。但是,为了与可能不成立的其他对象保持一致,并且通常为了清楚起见,我将始终使用new
bobince 2010年

1
另一种方法是使用单引号来保持清晰,因此您不必逃脱反斜杠:new RegExp('\b'+test+'\b');
IQAndreas

5
您仍然需要转义反斜杠。在JavaScript中,单引号没有不同的转义规则来将双引号引起来(不同于PHP)。
bobince 2015年

当尝试对带有.match()和.replace()JS regexing函数的变量使用边界运算符时,此答案也解决了相同的问题。
HoldOffHunger

正是我想要的。关于的部分When putting a regex in a string literal you need one more round of escaping; 是否有关于此(原因)的背景信息?
巴斯·佩特斯

9

您可以使用

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

但我建议使用

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

9

使用ES2015(aka 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))


3
错字:Regexp必须是RegExp
NFpeter
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.