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

How to dynamically create regex to use in .match Javascript?

本问题已经有最佳答案,请猛点这里访问。

我需要动态创建正则表达式JavaScript中使用的正则表达式。那怎么可能呢?

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

这是正确的regex:/\*\|(\d{3,})\|\*/g

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


Regexp是您的朋友:

1
2
3
4
5
var p ="\\*\\|", s ="\\|\\*"

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

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

工作示例。


您可以先使用变量构造一个RegExp对象。在形成RegExp物体的同时,也要记住避开*|

1
2
3
4
5
6
7
8
9
10
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|*"]