繁体   English   中英

Javascript RegExp-mask问题

[英]Problem with Javascript RegExp-mask

我有一个看起来像这样的字符串:

{theField} > YEAR (today, -3) || {theField}  < YEAR (today, +3)

我希望将其替换为:

{theField} > " + YEAR (today, -3) + " || {theField}  < " + YEAR (today, +3) + "

我已经试过了:

String.replace(/(.*)(YEAR|MONTH|WEEK|DAY+)(.*[)]+)/g, "$1 \" + $2 $3 + \"")

但这给了我:

{theField} > YEAR (today, +3) || {theField}  >  " + YEAR  (today, +3) + "

有人有什么想法吗?

当您拥有.*时,应谨慎使用贪婪匹配。 通常,这不执行您想要的操作-它与尽可能多的字符串匹配。 您需要使用否定的字符类在达到某个字符(例如[^)]时停止匹配),或者使用惰性匹配.*? 这是使用惰性量词的方法:

s = '{theField} > YEAR (today, -3) || {theField}  < YEAR (today, +3)';
result = s.replace(/((YEAR|MONTH|WEEK|DAY).*?\))/g, '" + $1 + "')

结果:

{theField} > " + YEAR (today, -3) + " || {theField}  < " + YEAR (today, +3) + "

请注意,我在您的正则表达式中做了一些整理:

  • KennyTM指出,已从DAY+删除+
  • [)]+更改为\\)
  • 将文字替换字符串从双引号更改为单引号,以便不需要转义替换文本中的引号
  • 删除了您在YEAR和以下左括号之间放入结果的多余空间

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM