Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何拆分此正则表达式以使其更具可读性?_Javascript_Regex - Fatal编程技术网

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: