如何在.match Javascript中动态创建正则表达式?

时间:2014-09-03 14:05:40

标签: javascript regex

我需要动态创建一个在匹配函数javascript中使用的正则表达式。 怎么可能?

var p = "*|";
var s = "|*";
"*|1387461375|* hello *|sfa|* *|3135145|* test".match(/"p"(\d{3,})"s"/g)

这将是正确的正则表达式:/\*\|(\d{3,})\|\*/g

即使我向p和s添加反斜杠它也不起作用。有可能吗?

2 个答案:

答案 0 :(得分:1)

RegExp是你的朋友:

var p = "\\*\\|", s = "\\|\\*"

var reg = new RegExp(p + '(\\d{3,})' + s, 'g')

"*|1387461375|* hello *|sfa|* *|3135145|* test".match(reg)

Working example

答案 1 :(得分:0)

您可以先使用变量构造一个RegExp对象。还要记住在形成*对象时转义|RegExp

var p = "*|";
var s = "|*";
var re = new RegExp(p.replace(/([*|])/g, '\\$1')
                 + "(\\d{3,})" + 
                 s.replace(/([*|])/g, '\\$1'), "g");

var m = "*|1387461375|* hello *|sfa|* *|3135145|* test".match(re);
console.log(m);

//=> ["*|1387461375|*", "*|3135145|*"]