我需要動態創建一個正則表達式來使用匹配函數javascript。 這怎麼可能?如何動態創建正則表達式以在.match Javascript中使用?
var p = "*|";
var s = "|*";
"*|1387461375|* hello *|sfa|* *|3135145|* test".match(/"p"(\d{3,})"s"/g)
這將是正確的正則表達式:/\*\|(\d{3,})\|\*/g
即使我添加反斜槓P和S這是行不通的。可能嗎?
我需要動態創建一個正則表達式來使用匹配函數javascript。 這怎麼可能?如何動態創建正則表達式以在.match Javascript中使用?
var p = "*|";
var s = "|*";
"*|1387461375|* hello *|sfa|* *|3135145|* test".match(/"p"(\d{3,})"s"/g)
這將是正確的正則表達式:/\*\|(\d{3,})\|\*/g
即使我添加反斜槓P和S這是行不通的。可能嗎?
RegExp是你的朋友:
var p = "\\*\\|", s = "\\|\\*"
var reg = new RegExp(p + '(\\d{3,})' + s, 'g')
"*|1387461375|* hello *|sfa|* *|3135145|* test".match(reg)
打了我約15秒:)。它最終是一個糟糕的正則表達式,但它符合op要求的內容 – 2014-09-03 14:10:16
雖然在創建內置對象實例時不需要new操作符,但[仍然推薦使用。](http://stackoverflow.com/ syntax/2712878/javascript-regex-pattern-concatenate-with-variable#comment2737765_2712896) – theftprevention 2014-09-03 14:23:49
SyntaxError:無效的正則表達式:/ * |(d {3,})| * /:無法重複。我也嘗試逃脫p和s沒有成功 – 2014-09-04 09:56:58
您可以先使用變量構造一個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|*"]
只是串聯'p',' 「(\ d {3,...})」'和's'(逸出'p'和's'每個http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex) – 2014-09-03 14:11:03