Javascript正则表达式检测句子结束

时间:2014-06-02 16:54:06

标签: javascript regex

我想在一个句子中检测@username。为此,我使用了一个简单的/\B@([\w]+)/ig。这很好用但是当用户名包含一个fullstop时会中断。例如,@user.name。那么检测@username的最佳正则表达式是什么,其中用户名可以包含a-zA-Z0-9.

测试句1:Find @david in the database.此处正则表达式应与david

匹配

测试句子2:Find @david.name in the database.此处正则表达式应与david.name

匹配

测试句子3:Find who is @david. And tell him something.此处的正则表达式应与david相匹配,而不是david.

3 个答案:

答案 0 :(得分:3)

这样做:

/\B@([a-zA-Z0-9.]*[a-zA-Z0-9])/g

它允许用户名中的点,但不是它的最后一个字符。

答案 1 :(得分:3)

您可以使用这个简单的正则表达式:

/\B@\b([\w.]+)\b/g

Demo

我使用了\w因为您在正则表达式中使用了它。如果你不想要下划线,那么你可以这样做:

/\B@\b([a-z\d.]+)\b/gi

答案 2 :(得分:0)

这适用于您的用例,不确定它是否会最终实现您想要的一切:

\B@((?:\w|\.(?=\S))+)

Demo


我试图保持逻辑与你的逻辑基本相同,所以基本上我们匹配\B@然后捕获\w+。但是,您也希望能够匹配.,只要它不是句子的结尾(后跟空格)。所以我将\w置于非捕获组中并使用替换(|)以允许\.如果后跟非空白字符((?=\S) })。然后我们重复这个非捕获组并捕获整个事物。