将正则表达式从JavaScript转换为ColdFusion?

时间:2016-11-15 15:46:36

标签: javascript regex coldfusion

大家好我有我在JavaScript中创建的正则表达式,现在我希望将它们放在ColdFusion中。我试图将其放入ColdFusion时遇到的问题很少,首先是空白值。如果我的变量为空,我的正则表达式输出false。第二个问题是将这些正则表达式组合在一个大行中,该行将检查我的文本文件的整行。出于某种原因,我的正则表达式忽略了大小写。如果我只有小写,我的正则表达式输出为真,即使在这种情况下是不允许的。这是我的正则表达式:

<cfset fileRegex = "^(?i)^ *[a-z][a-z' .,-]{0,49} *\t(?i) *[a-z][a-z' .,-]{0,49} *\t *(0?[1-9]|1[0-2])\/(0?[1-9]|1\d|2\d|3[01])\/(19|20)\d{2} *\t(?i) *([M|F]) *\t(?i) *(0?[0-9]|1[0-2]|[A-Z]{1,2}) *\t *([^\t].{0,50}) *\t(?i) *([A-Z0-9 ,]{1,102})? *\t *\d{10} *(\t[^\t]*){22}\t *([0-9]{1,4}) *\t([^\t]*)(\t *[A-Z ',.-]{1,50} *)?$">

<cfset myData = "John   Terry   1/29/1981   M   0   London  NULL    0129198109  609 8000    1   England">

<cfif REFind(fileRegex,myData,true) GT 0>
    true<br>
<cfelse>
    false<br>
</cfif>

所以在这种情况下,我的数据集中的最后一个单词是England,而我的正则表达式只能接受大写,但它没有,第二个问题是如果我将此字段留空,我会得到False返回。这最后一个字也是可选的,如果我将它与标签一起删除,我应该true。如果有人可以帮助解决这个问题,请告诉我。

1 个答案:

答案 0 :(得分:2)

您的正则表达式需要22列(\t[^\t]*){22}。您可以将它们设为可选项( - &gt; (\t[^\t]*){0,22}),并且正则表达式基本上可以正常工作:

(?i)^ *[a-z][a-z' .,-]{0,49} *\t *[a-z][a-z' .,-]{0,49} *\t *(0?[1-9]|1[0-2])\/(0?[1-9]|1\d|2\d|3[01])\/(19|20)\d{2} *\t *([MF]) *\t *(0?[0-9]|1[0-2]|[A-Z]{1,2}) *\t *([^\t].{0,50}) *\t *([A-Z0-9 ,]{1,102})? *\t *\d{10} *(\t[^\t]*){0,22}\t *([0-9]{1,4}) *\t([^\t]*)(\t *[A-Z ',.-]{1,50} *)?$

请参阅regex demo

一些较小的增强功能:

  • 注意你里面有很多(?i),这是没有必要的。模式开头的一个(?i)就足够了。
  • {li> |内的[M|F]应该被删除,因为它被解析为文字管道符号。 [M|F]匹配3个字符中的1个:M|F
  • 还请检查/是否真的应该被转义,我怀疑它是否需要转义,因为这里没有正则表达式分隔符。