如何在 JavaScript 中分解正则表达式

发布于 2024-10-07 04:32:38 字数 591 浏览 4 评论 0原文

  String.prototype.is_email = function() {
      return this.match(/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b/);
  };

我试图让我的所有 JavaScript 文件在闭包 linter 下进行 lint ( http:// /code.google.com/closure/utilities/docs/linter_howto.html );如何使用 /regex/ 语法分解正则表达式。

第 24 行,E:0110:行太长(200 个字符)。 在 1 个文件中发现 1 个错误,包括 0 个新错误(0 个文件正常)。

  String.prototype.is_email = function() {
      return this.match(/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b/);
  };

I'm trying to get all my javascript files to lint under closure linter ( http://code.google.com/closure/utilities/docs/linter_howto.html ); how do I break up a Regular Expression using the /regex/ syntax.

Line 24, E:0110: Line too long (200 characters).
Found 1 errors, including 0 new errors, in 1 files (0 files OK).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

烟若柳尘 2024-10-14 04:32:38

您可以使用 RegExp(pattern, modifiers) 并通过模式作为字符串。可以使用串联将字符串分成小部分。

You can use the RegExp(pattern, modifiers) and pass the pattern as a string. The string can be built up in small parts using concatenation.

戈亓 2024-10-14 04:32:38

非常黑客:在正则表达式中添加一个换行符(将长行分成较小的行),通过在前面添加 \ 来转义该换行符,并直接在其后面放置一个 {0}为了防止它被考虑在内,永远......

var regex = /abc\
{0}def/;

regex.test("abcdef")   // true
regex.text("abc\ndef") // false

Very hackish: add a newline in the regexp (to break the long line into smaller ones), escape that newline by prepending a \ and place a {0} directly after it to prevent it from being taken into account, ever...

var regex = /abc\
{0}def/;

regex.test("abcdef")   // true
regex.text("abc\ndef") // false
固执像三岁 2024-10-14 04:32:38

我编写了一个简单的函数来组合正则表达式,以使调试它们更容易管理。

  var joinRegExp = function() {
    var args = Array.prototype.slice.call(arguments);
    return new RegExp(args.reduce(function(str, exp) {
      return str + exp.toString().replace(/\//g, '');
    }, ''));
  };

所以你可以把你的表达分成这样的东西。

var local = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+/;
var localOpt = /(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*/;
var domain = /(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+/;
var tld = /(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b/;

然后加入他们。

var emailPattern = joinRegExp(local, localOpt, /@/, domain, tld);

您可以查看这个 plunk 的演示。

I wrote a simple function for combining regular expressions to make debugging them a little more manageable.

  var joinRegExp = function() {
    var args = Array.prototype.slice.call(arguments);
    return new RegExp(args.reduce(function(str, exp) {
      return str + exp.toString().replace(/\//g, '');
    }, ''));
  };

So you could break your expression into something like this.

var local = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+/;
var localOpt = /(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*/;
var domain = /(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+/;
var tld = /(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b/;

And then join them.

var emailPattern = joinRegExp(local, localOpt, /@/, domain, tld);

You can check out this plunk for a demo.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文