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 就像我说的那样,我真的不知道输入的实际样子,所以如果没有看到您正在使用的真实输入,我真的无法提供太多帮助。为什么不在传递给正则表达式之前去掉
<br _moz_dirty="">
?无论如何 - 我该睡觉了,我会在早上回来查看。
想象一下这样的输入:** #bug 和 #another以上是关于Javascript正则表达式:找到一个不跟空格字符的单词的主要内容,如果未能解决你的问题,请参考以下文章