Javascript 如何拆分此正则表达式以使其更具可读性?
并且仍然将其保留在对象文本中:Javascript 如何拆分此正则表达式以使其更具可读性?,javascript,regex,Javascript,Regex,并且仍然将其保留在对象文本中: url: /:\/{0,3}(www\.)?([0-9.\-A-Za-z]{1,253})([\x00-\x7F]{1,2000})$/, 此外,我如何简化它 在目前的状态下,这只是一个混乱。我现在不担心准确性 以下是我在Crockford的书中的尝试: makeRegex: function () { var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3}) ([0-9
url: /:\/{0,3}(www\.)?([0-9.\-A-Za-z]{1,253})([\x00-\x7F]{1,2000})$/,
此外,我如何简化它
在目前的状态下,这只是一个混乱。我现在不担心准确性
以下是我在Crockford的书中的尝试:
makeRegex: function () {
var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})
([0-9.\-A-Za-z]+)
(?::(\d+))
?(?:\/([^?#]*))
?(?:\?([^#]*))
?(?:#(.*))?$/;
},
正则表达式是出了名的不可读。他们不喜欢额外的空间,也没有评论。唯一可能的解决方案是构造一个字符串,然后将其转换为正则表达式 这是我走过的台阶 目标正则表达式
var regex=/:\/{0,3}(www\.)?([0-9.\-A-Za-z]{1,253})([\x00-\x7F]{1,2000})$/;
使用RegExp
从字符串构造表达式
var parse_url = RegExp(':/{0,3}(www\\.)?([0-9.\\-A-Za-z]{1,253})([\\x00-\\x7F]{1,2000})$');
记住:
- 表达式开头和结尾的
分隔符不存在-它们仅在正则表达式文本中/
- 字符串中的
字符会加倍,因为字符串有自己的解释\
“+”
作为策略点来分解字符串:
var parse_url = RegExp(':/{0,3}(www\\.)?'+'([0-9.\\-A-Za-z]{1,253})'+'([\\x00-\\x7F]{1,2000})$');
var parse_url = RegExp(':/{0,3}(www\\.)?'+
'([0-9.\\-A-Za-z]{1,253})'+
'([\\x00-\\x7F]{1,2000})$');
这不是一个很好的解决方案,但这就是正则表达式所能做的一切
现代JavaScript确实支持模板文本形式的多行字符串,但这可能不会有多大帮助。正则表达式是出了名的不可读。他们不喜欢额外的空间,也没有评论。唯一可能的解决方案是构造一个字符串,然后将其转换为正则表达式 这是我走过的台阶 目标正则表达式
var regex=/:\/{0,3}(www\.)?([0-9.\-A-Za-z]{1,253})([\x00-\x7F]{1,2000})$/;
使用RegExp
从字符串构造表达式
var parse_url = RegExp(':/{0,3}(www\\.)?([0-9.\\-A-Za-z]{1,253})([\\x00-\\x7F]{1,2000})$');
记住:
- 表达式开头和结尾的
分隔符不存在-它们仅在正则表达式文本中/
- 字符串中的
字符会加倍,因为字符串有自己的解释\
“+”
作为策略点来分解字符串:
var parse_url = RegExp(':/{0,3}(www\\.)?'+'([0-9.\\-A-Za-z]{1,253})'+'([\\x00-\\x7F]{1,2000})$');
var parse_url = RegExp(':/{0,3}(www\\.)?'+
'([0-9.\\-A-Za-z]{1,253})'+
'([\\x00-\\x7F]{1,2000})$');
这不是一个很好的解决方案,但这就是正则表达式所能做的一切
现代JavaScript确实支持模板文本形式的多行字符串,但这在这里可能不会有多大帮助。我建议将正则表达式分成多个部分,并将每个部分分配给一个命名良好的变量,必要时添加注释。示例旨在演示原理,而不是正确验证URL,因为URL匹配正则表达式很难编写():
现在,正则表达式被分解为更小、更容易理解的小表达式,整个表达式更易于阅读。我建议将正则表达式分解为多个部分,并将每个部分分配给一个命名良好的变量,必要时添加注释。示例旨在演示原理,而不是正确验证URL,因为URL匹配正则表达式很难编写():
现在将正则表达式分解为更小、更容易理解的小表达式,整个表达式更易于阅读。捕获组有用吗?你需要抓到什么吗?我需要。。。我需要域名。。。只有域。。。现在真是一团糟。。。我可能应该删除并重新开始。你用的是什么语言?大多数语言都有小的lib来正确处理此问题;)JavaScript。。。哇,这给了一个未终止的正则表达式…如果你想要像自由间距和注释这样的功能,你可以使用模块XRegExp:捕获组有用吗?你需要抓到什么吗?我需要。。。我需要域名。。。只有域。。。现在真是一团糟。。。我可能应该删除并重新开始。你用的是什么语言?大多数语言都有小的lib来正确处理此问题;)JavaScript。。。哇,它给出了一个未终止的正则表达式……如果您想要自由间距和注释等功能,可以使用模块XRegExp: