将变量插入正则表达式字符串

时间:2014-06-22 16:23:26

标签: javascript regex

我在StackOverflow上发现了很多关于如何做到这一点的问题,但它并不适合我。

var username = "abcdefg";
var min_length = 3;
var max_length = 24;
var regex = new RegExp('^[\w.-]{' + min_length + ',' + max_length + '}$');
if (regex.test(username))
    document.getElementById('status').innerHTML = 'match';
else
    document.getElementById('status').innerHTML = 'no match';

我之前和之后都尝试过斜杠:

new RegExp('/^[\w.-]{' + min_length + ',' + max_length + '}$/')

我也尝试使用双引号而不是单引号(不确定regex是否将单引号视为保留或其他内容)。

如果我删除引号并为变量输入数字,它可以正常工作:

new RegExp(/^[\w.-]{3,24}$/)

的jsfiddle: http://jsfiddle.net/88ef3/

3 个答案:

答案 0 :(得分:3)

使用RegExp构造函数从字符串构建正则表达式时,必须转义斜杠:

new RegExp('^[\\w.-]{' + min_length + ',' + max_length + '}$');

请记住,javascript字符串中的斜杠用于转义,但在这里你想要slah作为一个字符,所以你必须自行转义。

Demo

答案 1 :(得分:1)

new RegExp('^[\\w.-]{' + min_length + ',' + max_length + '}$')

答案 2 :(得分:0)

这可能会有所帮助

var username = "abcdefg";
var min_length = 3;
var max_length = 24;
var str1='^[\\w.-]{'+min_length+','+max_length+'}$';
var regex = new RegExp(str1,"i");
if (regex.test(username))
    document.getElementById('status').innerHTML = 'match';
else
    document.getElementById('status').innerHTML = 'no match';

http://jsfiddle.net/Et7J8/