【问题标题】:Line-breaking a regexp in javascript?在javascript中换行正则表达式?
【发布时间】:2012-09-03 04:07:26
【问题描述】:

由于下面显示的正则表达式文字有些缺乏可读性,我想将其分成几行。我将如何做到这一点以及需要更改/转义什么?

regex = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/i;

谢谢

【问题讨论】:

  • 你不能。我也怀疑它会增加可读性。
  • 这个正则表达式实际上是做什么的?可能有可能更短并优化正则表达式
  • 如果你准备好了,你可以只使用一个字符串和 RegExp 构造函数,这可以让你将表达式分解为 "meaningful"部分......虽然,我必须说:看起来这个表达式将用于 HTML,在这种情况下:只需解析 DOM
  • 你能用评论来解释你的正则表达式是做什么的吗?另外,出于好奇,我想知道它的作用。
  • @starbeamrainbowlabs 这是我在某处发现的用于说明我的问题的 URL 验证的正则表达式。我认为它可能会更有效

标签: javascript regex literals


【解决方案1】:

JavaScript 不支持多行正则表达式。不过,您可以从字符串构造正则表达式:

r = new RegExp( 
"\\b" + 
"(" + 
"(?:[a-z][\\w-]+:(?:/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)" + 
"(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+" + 
"(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’])" + 
")", "i")

(我希望我的字符串构建语法正确 - 我不是 JavaScript 人,所以如果这不起作用,请告诉我)

【讨论】:

  • 你不需要反斜杠(实际上它们会产生语法错误),JS会自动查找下一行。
猜你喜欢
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 2019-05-11
  • 2023-03-09
相关资源
最近更新 更多