Javascript正则表达式:找到一个不跟空格字符的单词

Posted

技术标签:

【中文标题】Javascript正则表达式:找到一个不跟空格字符的单词【英文标题】:Javascript regex: find a word NOT followed by space character 【发布时间】:2012-01-24 23:30:11 【问题描述】:

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

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

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

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

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

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

【问题讨论】:

当你说“后面没有空格”,你真的是在说“在字符串的末尾”吗?它们不一定是同一回事。 不,它来自 contenteditable div,FF 把它自己的标签放在最后。 【参考方案1】:

试试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 ]/,这将返回null 用于@bug and @another_@bug_ 用于@another and @bug_

【讨论】:

【参考方案2】:

听起来你真的只是在输入的末尾寻找单词:

/@\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

【讨论】:

问题是这个字符串来自 并且出于某种原因,FF 总是添加一些标签,例如:
在这种情况下,正则表达式不会'不工作
@Zeljko 示例输入没有显示这样的内容,您的问题也没有提到 html。想要更好的答案?问一个更好的问题。 你是对的,我之前没有注意到那个额外的标签。对此有任何提示吗?我尝试了消极的前瞻和谁知道什么,但它一直失败。 @Zeljko 就像我说的那样,我真的不知道输入的实际样子,所以如果没有看到您正在使用的真实输入,我真的无法提供太多帮助。为什么不在传递给正则表达式之前去掉&lt;br _moz_dirty=""&gt;?无论如何 - 我该睡觉了,我会在早上回来查看。 想象一下这样的输入:** #bug 和 #another** 我不能只删除该标签,因为其他浏览器可能会自行添加其他内容。

以上是关于Javascript正则表达式:找到一个不跟空格字符的单词的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配不跟点(“。”)的数字

javascript正则

正则表达式怎么匹配空格

正则表达式替换 HTML 文档中的空格

JavaScript:正则表达式 CamelCase 到句子

Javascript正则表达式:根据长度制作不同的空格:1 000、10 000、100 000 [重复]