Javascript正则表达式"无效的群组"?

时间:2016-06-09 18:52:26

标签: javascript appcelerator-titanium

我正在尝试使用javascript用户名验证正则表达式

' ^(?=.{4,16}$)(?![_.])(?!.*[_.]{2})[a-zA-Z0-9._]+(?<![_.])$
'  └─────┬────┘└───┬──┘└─────┬─────┘└─────┬─────┘ └───┬───┘
'        │         │         │            │           no _ or . at the end
'        │         │         │            │
'        │         │         │            allowed characters
'        │         │         │
'        │         │         no __ or _. or ._ or .. inside
'        │         │
'        │         no _ or . at the beginning
'        │
'        username is 4-16 characters long

当我在Titanium Appcelerator上使用它时出现此错误

[ERROR] :  Error generating AST for "***register.js"
[ERROR] :  Invalid regular expression: /^(?=.{4,16}$)(?![_.])(?!.*[_.]{2})[a-zA-Z0-9._]+(?<![_.])$/: Invalid group
[ERROR] :  Alloy compiler failed

我的代码:

var regex = /^(?=.{4,16}$)(?![_.])(?!.*[_.]{2})[a-zA-Z0-9._]+(?<![_.])$/;

        if ( !regex.test(e.value)) 
         {
            inputs.Username.borderColor = 'red';
            inputs.Username.backgroundColor = '#edcaca';
            return false;
         }
  

任何想法为什么它给出错误无效组?

2 个答案:

答案 0 :(得分:6)

这可能对您有用:

/^(?=.{4,16}$)(?![_.])(?!.*[_.]{2})[a-z0-9._]+[a-z0-9]$/i

或者避免大多数前瞻:

/^(?!.*[_.]{2})[a-z0-9][a-z0-9._]{2,14}[a-z0-9]$/i

Try it online

问题是JavaScript不支持lookbehinds(肯定(?<=...)和负(?<!...))。

答案 1 :(得分:3)

JavaScript的正则表达式引擎不支持lookbehind(?<![_.])