在javascript中使用正斜杠动态创建正则表达式

时间:2014-01-06 10:54:30

标签: javascript regex match

我试图匹配具有此格式的行。编写静态regEx很好,但我需要使用2个变量来动态创建正则表达式。

我似乎无法得到如何正确地逃脱前向支架我试图逃避它们,而不是逃避它们甚至双重逃避它们(只是为了它的哎呀)但是fireBug显示实际的regEx被创建同样没有母体我怎么样做它并不符合我的意见。

匹配的行看起来像这样: 9.SSRDOCSWSHK1 ///// 23NOV96 / M // YEUNG / WINSTON / JEREMY-5.1

我尝试了什么:

var regString ='\\d{1,2}.SSRDOCS[0-9A-Z]{2}HK1[/]{5}\\d\\d[A-Z]{3}\\d\\d/[MF]//'+curGstNme+'([/A-Z]+)?-'+pax.slice(0,1)+'\.'
var namedGdocRegEx = new RegExp(regString,"g");

FireBug gives RegExp /\d{1,2}.SSRDOCS[0-9A-Z]{2}HK1[\/]{5}\d\d[A-Z]{3}\d\d\/[MF]\/\/CASTANEDA\/HAZEL([\/A-Z]+)?-1./g

---------------------------

var regString ='\\d{1,2}.SSRDOCS[0-9A-Z]{2}HK1[\/]{5}\\d\\d[A-Z]{3}\\d\\d\/[MF]\/\/'+curGstNme+'([\/A-Z]+)?-'+pax.slice(0,1)+'\.'
var namedGdocRegEx = new RegExp(regString,"g");

FireBug gives RegExp /\d{1,2}.SSRDOCS[0-9A-Z]{2}HK1[\/]{5}\d\d[A-Z]{3}\d\d\/[MF]\/\/CASTANEDA\/HAZEL([\/A-Z]+)?-1./g

---------------------------

var regString ='\\d{1,2}.SSRDOCS[0-9A-Z]{2}HK1[\\/]{5}\\d\\d[A-Z]{3}\\d\\d\\/[MF]\\/\\/'+curGstNme+'([\\/A-Z]+)?-'+pax.slice(0,1)+'\.'
var namedGdocRegEx = new RegExp(regString,"g");

FireBug gives RegExp /\d{1,2}.SSRDOCS[0-9A-Z]{2}HK1[\/]{5}\d\d[A-Z]{3}\d\d\/[MF]\/\/CASTANEDA\/HAZEL([\/A-Z]+)?-1./g

3 个答案:

答案 0 :(得分:1)

在正则表达式中,你需要转义DOT,因为DOT意味着任何角色。

使用此正则表达式:

regString ='\\d{1,2}\\.SSRDOCS[0-9A-Z]{2}HK1/{5}\\d\\d[A-Z]{3}\\d\\d/[MF]//'+ curGstNme + '([/A-Z]+)?-' + pax.slice(0,1) + '\\.';

答案 1 :(得分:0)

实际上问题出在其他地方。显然,fireBug只显示创建的正则表达式(在" watch"面板中),可以看到转义的框格。这让我觉得正则表达式没有被正确创建。

答案 2 :(得分:0)

你的正则表达式可以这样减少:

var regString ='\\d{1,2}\\.SSRDOCS[0-9A-Z]{2}HK1/{5}\\d{2}[A-Z]{3}\\d{2}/[MF]//'+curGstNme+'([/A-Z]+)?-'+pax.slice(0,1)+'\.'

我做了什么改变?

  • \\d\\d可以使用\d{2}高效替换。
  • .已替换为\\.,以便完全匹配。
  • [/]{5}已替换为/{5}

这在视觉上给你:

Regular expression visualization