2010-12-12 2 views
3
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 файлы нибудь вкусненькое под закрывающей пуха (http://code.google.com/closure/utilities/docs/linter_howto.html); как разбить регулярное выражение с помощью синтаксиса/regex /.как я разбить регулярное выражение в JavaScript

Линия 24, E: 0110: Линия слишком длинная (200 символов). Найдено 1 ошибок, включая 0 новых ошибок, в 1 файле (0 файлов OK).

ответ

6

Вы можете использовать RegExp(pattern, modifiers) и передать шаблон в виде строки. Строка может быть создана небольшими частями с помощью конкатенации.

+0

И это имеет преимущество, заключающееся в том, чтобы комментировать каждую часть регулярного выражения, что является довольно сложным. Хороший ответ. – Chubas

+4

Предупреждение: если вы это сделаете, вам нужно будет помнить, что нужно добавить дополнительную обратную косую черту перед каждой обратной косой чертой в вашем регулярном выражении. –

2

Очень хак: добавить новую строку в регулярном выражении (разбить длинную линию на более мелкие), избежать эту новую строки, предваряя \ и поместите {0} непосредственно после него, чтобы предотвратить его принимать во внимание, когда-либо .. .

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

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

Я написал простую функцию для объединения регулярных выражений, чтобы отладить их немного более управляемыми.

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 для демонстрации.