6

我需要 javascript 正则表达式,它将匹配不跟空格字符并且之前有 @ 的单词,如下所示:

@bug - 找到“@bug”,因为它后面没有空格

@bug 和我 - 什么也没找到,因为“@bug”后面有空格

@bug 和 @another - 仅查找“@another”

@bug 和 @another 什么都找不到,因为这两个词后面都跟有空格。

帮助?补充:字符串是从中获取的,FF 将它自己的标签放在它的末尾。虽然我基本上只需要最后一个以@开头的单词,但不能使用$(end-of-string)。

4

2 回答 2

16

试试re = /@\w+\b(?! )/。这会查找一个单词(确保它捕获整个单词)并使用否定前瞻来确保该单词后面没有空格。

使用上面的设置:

var re = /@\w+\b(?! )/, // etc etc

for ( var i=0; i<cases.length; i++ ) {
    print( re2.exec(cases[i]) )
}

//prints
@bug
null
@another
null

这不起作用的唯一方法是,如果您的单词以下划线结尾,并且您希望该标点符号成为单词的一部分:例如,'@bug and @another_ blahblah' 将选择 @another,因为@another后面没有空间。这似乎不太可能,但如果您也想处理这种情况,您可以使用/@\w+\b(?![\w ]/and 会返回nullfor@bug and @another_@bug_for @another and @bug_

于 2011-12-21T05:18:15.510 回答
5

听起来您实际上只是在输入结尾处寻找单词:

/@\w+$/

测试:

var re = /@\w+$/,
    cases = ['@bug',
             '@bug and me',
             '@bug and @another',
             '@bug and @another and something'];

for (var i=0; i<cases.length; i++)
{
    console.log(cases[i], ':', re.test(cases[i]), re.exec(cases[i]));
}

// prints
@bug : true ["@bug"]
@bug and me : false null
@bug and @another : true ["@another"]
@bug and @another and something : false null
于 2011-12-21T04:14:56.253 回答