拼凑正则表达式

时间:2011-11-21 20:29:55

标签: javascript regex

我在最近几天询问了几个JavaScript正则表达式问题,因为我试图将更大的正则表达式拼凑在一起,但我仍然遇到一些麻烦,所以我将询问整个问题,这可能是我本来应该做些什么。

基本上,我需要的是一个符合以下所有条件的正则表达式:

  1. 空字符串。

  2. 包含至少一个字母数字字符但不以+1开头的字符串。

  3. 以+1开头且至少还有1个字母数字字符的字符串。

  4. 所以一些例子如下:

    "" = true
    "+" = false
    "+abc" = true
    "abc" = true
    "+1" = false
    "+12" = true
    "+2" = true
    

5 个答案:

答案 0 :(得分:2)

根据您修改后的规定要求,您只想匹配:

  • 空字符串^$

  • 包含至少一个字母数字字符但不以+1开头的字符串,^(?!\+1).*[a-zA-Z0-9]

  • 以+1开头且至少还有1个字母数字字符的字符串^\+1.*[a-zA-Z0-9]

放在一起,即:

^$|^(?!\+1).*[a-zA-Z0-9]|^\+1.*[a-zA-Z0-9]

或者,如果您愿意:

^($|(?!\+1).*[a-zA-Z0-9]|\+1.*[a-zA-Z0-9])

答案 1 :(得分:1)

^(?:\+1[a-zA-Z0-9]+|(?!\+1).*[a-zA-Z0-9]+.*)?$

<强>解释

正则表达式在两种情况下分开:( CASE1 | CASE2 )

第一种情况: \+1[a-zA-Z0-9]+匹配以+1开头的每个文字,后跟一个或多个字母数字字符{[a-zA-Z0-9]+代表选择一个或多个字符,从 a z ,从 A Z 或从 0 9

第二种情况: (?!\+1).*[a-zA-Z0-9]+.*匹配不以+1(?!\+1))开头的每个文字,后面跟着你想要的任意数量的字符因为它包含至少一个字母数字字符(.*[a-zA-Z0-9]+.*代表选择0或更多你想要的字符,加上上面解释的正则表达式,再加上0或更多的任何字符

这两种情况分别符合您的规则#3 #2

规则#1 由整个表达式末尾的?处理,这意味着所有这些都是可选的,因此它也可以是空字符串。< / p>

请注意以下内容:

  • (?:something)用于匹配字符串,但不捕获它。
  • (?!something)用于确保它与字符串
  • 不匹配
  • \用于转义特殊字符,例如+,当您希望它们作为常规字符存在时
  • +用于说上一项中的一项或多项
  • *用于表示前一项中的零个或多个

希望我帮助过!

答案 2 :(得分:0)

根据您最新的要求:

  1. 空字符串。
  2. 包含至少一个字母数字字符但不以+1开头的字符串。
  3. 以+1开头且至少还有1个字母数字字符的字符串。
  4. 以下是我的用法:

    /^([]|(\+1)?.*[a-zA-Z0-9]+.*)$/
    

    在计划英语中,正则表达式会说要查找字符串:

    1. 清空,或
    2. 具有字母字符(并且可选择以+1开头)

答案 3 :(得分:0)

//var re = /(^$)/;  //Matches empty
//var re = /(^[a-z0-9]+)/;  //matches only string no plus
//var re = /(^\+([0a-z2-9])([a-z0-9].*)?)/;  //Matches the + [not one] requirement


//Joined together with | for or
//Might be simplified more, but this works ;)
var re = /(^([a-z0-9]+.*|[a-z0-9]+.*|\+1[a-z0-9]+.*|\+([0a-z2-9])([a-z0-9].*)?)?$)/i;

function testIt( str, expected ) {    
    if( !!re.exec( str ) === expected ) {
        console.info(str + "\tpassed" );
    } else{
        console.error(str + "\tfailed" );
    }
}

testIt("", true);
testIt("+", false);
testIt("+abc", true);
testIt("abc", true);
testIt("+1", false);
testIt("+12", true);
testIt("+12_", true);
testIt("+2", true);
testIt("+2c", true);
testIt("+2_", false);
testIt("+007", true);

JSFiddle

答案 4 :(得分:0)

A string that contains at least one alpha-numeric character but does not start with a +1.  
A string that starts with +1 and has at least 1 more alpha-numeric character.

让我们稍微改写一下:

包含至少一个字母数字字符但不以+1开头的字符串。
以+1开头并且至少 1 更多字母数字字符的字符串。

再试一次:

但不是以+1 |开头包含至少一个字母数字字符的字符串以+1 |开头的字符串并且至少 1 更多字母数字字符。

那么这又是什么呢?

无。你只想匹配一个空字符串。我的意思是真的吗?