我正在创建一个从用户那里获取输入的程序,然后使用该输入创建一个正则表达式。
以下是一些示例代码:
<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>
它接受这个:
假设我使用FooBar
作为输入。而不是创建一个说/[A-Z]{3}[ ]\d{9}[ ]FOOBAR/g
的正则表达式,我得到一个说/[A-Z]{3}[ ]d{9}[ ]FOOBAR/g
的正则表达式。 d
代替\d
。
为什么这不能正常工作?我怎么能纠正这个?
谢谢。
答案 0 :(得分:2)
使用构造函数时,正常的字符串转义规则 (当包含在字符串中时带有\的特殊字符前面) 必要。例如,以下内容是等效的:
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