2014-09-03 33 views
0

我需要動態創建一個正則表達式來使用匹配函數javascript。 這怎麼可能?如何動態創建正則表達式以在.match Javascript中使用?

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

這將是正確的正則表達式:/\*\|(\d{3,})\|\*/g

即使我添加反斜槓P和S這是行不通的。可能嗎?

+0

只是串聯'p',' 「(\ d {3,...})」'和's'(逸出'p'和's'每個http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex) – 2014-09-03 14:11:03

回答

1

RegExp是你的朋友:

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

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

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

Working example

+0

打了我約15秒:)。它最終是一個糟糕的正則表達式,但它符合op要求的內容 – 2014-09-03 14:10:16

+0

雖然在創建內置對象實例時不需要new操作符,但[仍然推薦使用。](http://stackoverflow.com/ syntax/2712878/javascript-regex-pattern-concatenate-with-variable#comment2737765_2712896) – theftprevention 2014-09-03 14:23:49

+0

SyntaxError:無效的正則表達式:/ * |(d {3,})| * /:無法重複。我也嘗試逃脫p和s沒有成功 – 2014-09-04 09:56:58

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|*"]