正则表达式检查" @"在一个单词的开头,它应该只是一个单词

时间:2015-06-27 13:52:26

标签: regex autocomplete

我需要使用正则表达式匹配@符号。我试过了正则表达式/\B@(\w*)$/。它正在工作,但我的用例是@应该只在一个单词的开头出现一次。不超过一次:

@test - Right one.
@@test - Not a right one.

这是小提琴http://jsfiddle.net/Kurshith/deepk1dm/1/。在文本区域键入@时,将触发自动完成。但即使你输入@两次也会允许。但在我的情况下,它应该只允许@test,@ test @hello,@。请帮帮我。

2 个答案:

答案 0 :(得分:1)

/^@[^@]*$/会这样做。您的情况可以表述为:以@开头,然后是@出现0次或更多次的其他任何内容,直到字符串结尾。

使用Ruby irb进行测试:

irb(main):003:0> /^@[^@]*$/.match("@test")
=> #<MatchData "@test">

irb(main):004:0> /^@[^@]*$/.match("@@test")
=> nil

irb(main):005:0> /^@[^@]*$/.match("@test@")
=> nil

irb(main):006:0> /^@[^@]*$/.match("@test@test")
=> nil

irb(main):007:0> /^@[^@]*$/.match("test")
=> nil

irb(main):008:0> /^@[^@]*$/.match("t@est")
=> nil

irb(main):009:0> /^@[^@]*$/.match("@")
=> #<MatchData "@">

irb(main):010:0> /^@[^@]*$/.match("@@")
=> nil

答案 1 :(得分:0)

我会使用空白边界。根据需要添加锚点。

(?<!\S)@(\w*)(?!\S)