search

Home  >  Q&A  >  body text

javascript - 正则表达式匹配@和空格之间的字符

举个例子:AAA@XXX YYYY
匹配到@和空格之间的字符XXX,请问正则怎么来写?

PHP中文网PHP中文网2783 days ago641

reply all(6)I'll reply

  • 阿神

    阿神2017-04-11 12:48:40

    preg_match('/@(.*) /', 'AAA@XXX YYYY', $result);

    reply
    0
  • PHP中文网

    PHP中文网2017-04-11 12:48:40

    if(preg_match_all(
        '%@(\w+)%u', 
        '@张全蛋 含泪质检@三星Note7 被炸飞,听说@炸机 跟@啤酒 更配哦!', 
        $arr
    )) {
        var_export($arr);
    }
    //输出
    array (
      0 => 
      array (
        0 => '@张全蛋',
        1 => '@三星Note7',
        2 => '@炸机',
        3 => '@啤酒',
      ),
      1 => 
      array (
        0 => '张全蛋',
        1 => '三星Note7',
        2 => '炸机',
        3 => '啤酒',
      ),
    )

    正则表达式 %@(\w+)%u 中:
    %是分隔符.
    u是修饰符,表示unicode.
    \w是元字符,在ASCII下等价于[A-Za-z0-9_],在unicode下表示字符(包括中文)和数字和下划线.
    +是量词,表示1个或多个,等价于{1,}的写法.
    ()表示子模式,体现在匹配结果中的$arr[1]里.
    区别于主模式,体现在匹配结果中的$arr[0]里.

    另外,也可以试试下面这个正则表达式:

    %@(\S+)\s%
    其中:
    \s   匹配空白字符,包括:空格,制表符(\t,\v),回车(\r),换行(\n),换页(\f),等价于[ \t\r\n\v\f]
    \S   匹配除空白字符外的任意字符,等价于[^ \t\r\n\v\f]

    另外:

    preg_match:     返回模式的匹配次数,0次(不匹配)或1次,因为preg_match在第1次匹配后会停止搜索.
    preg_match_all: 返回完整匹配次数,如果发生错误返回FALSE.

    也就是说,如果上面的例子使用preg_match,那只能匹配到字符串中的"张全蛋".

    reply
    0
  • PHP中文网

    PHP中文网2017-04-11 12:48:40

    @(.+)\s

    reply
    0
  • 怪我咯

    怪我咯2017-04-11 12:48:40

    var ex = "aaa@abc yyy";
    var pattern = /@(.+?)s/g;
    var rs = ex.match(pattern)[0].slice(1,4);

    reply
    0
  • 巴扎黑

    巴扎黑2017-04-11 12:48:40

    应该是这样:
    'AAA@XXX YYYY'.match(/@(.*)\s/)[1]
    如果要防止XXX中包含@和空格,就要这样:
    'AAA@XXX YYYY'.match(/@([^@\s]*)\s/)[1]

    reply
    0
  • 怪我咯

    怪我咯2017-04-11 12:48:40

    var ex = "aaa@abc yyy";
    var pattern = /@(.+?)\s/g;
    pattern.exec(ex)[1]

    // abc

    reply
    0
  • Cancelreply