如何基于用户输入动态创建正则表达式

时间:2014-01-23 03:44:01

标签: javascript regex

我正在创建一个从用户那里获取输入的程序,然后使用该输入创建一个正则表达式。

以下是一些示例代码:

<input id="a" type="text" />
<input type="button" value="Create" id="b" />
<script>
(function (z , code) {
    var input = document.getElementById("a"),
        b = document.getElementById("b");
    function primary(){
        var regEx = new RegExp("[A-Z]{3}[ ]\d{9}[ ]" + input.value.toUpperCase(), "g");
        alert(regEx);
    };
    b.addEventListener("click",function(){
        primary();
    }, false);
}(this, document));
</script>

FIDDLE

它接受这个:

假设我使用FooBar作为输入。而不是创建一个说/[A-Z]{3}[ ]\d{9}[ ]FOOBAR/g的正则表达式,我得到一个说/[A-Z]{3}[ ]d{9}[ ]FOOBAR/g的正则表达式。 d代替\d

为什么这不能正常工作?我怎么能纠正这个?

谢谢。

1 个答案:

答案 0 :(得分:2)

根据MDN RegExp docs

  

使用构造函数时,正常的字符串转义规则   (当包含在字符串中时带有\的特殊字符前面)   必要。例如,以下内容是等效的:

var re = /\w+/;
var re = new RegExp("\\w+");

在您的RegEx中,\d是一个特殊字符

  

\ d匹配基本拉丁字母中的数字字符。当量   至[0-9]。

     

例如,/ \ d /或/ [0-9] /匹配“B2中的'2'是套件编号。”

所以,您的RegEx应该是这样的

[A-Z]{3}[ ]\\d{9}[ ]   //\\d instead of \d