在下文中,正则表达式(Javascript)匹配"用户" (用户是随机名称),不包括" @"字符?
I want to tag this @user here
and this @user
@user
我查看了以下解决方案并制作了以下不起作用的正则表达式
RegEx pattern to match a string between two characters, but exclude the characters
\@(.*)\s
Regular Expression to find a string included between two characters while EXCLUDING the delimiters
(?!\@)(.*?)(?=\s)
Regex: Matching a character and excluding it from the results?
^@[^\s]+
最后,我使这个正则表达式有效,但返回" @ user"而不是"用户":
@[^\s\n]+
用于执行正则表达式的Javascript是:
string.match(/@[^\s\n]+/)
答案 0 :(得分:1)
我发现我需要发表澄清。
如果事先在JS中知道一个模式,即如果你没有从单独的变量构建一个正则表达式,那么应该使用RegExp
literal notation(例如/<pattern>/<flag(s)>
)。
在这种情况下,您需要一个捕获组来从匹配开始的@
获取子匹配,然后继续下一个非空白字符。如果在一个输入字符串中有多个值,则不能使用String#match
,因为使用该方法的全局正则表达式会丢失捕获的文本。您需要使用RegExp#exec
:
var s = "I want to tag this @user here\nand this @user\n@user";
var arr = [];
var re = /@(\S+)\b/g;
while ((m=re.exec(s)) !== null) {
arr.push(m[1]);
}
document.write(JSON.stringify(arr));
我建议的正则表达式是@(\S+)\b
:
@
- 匹配文字@
(\S+)
- 匹配并捕获到第1组一个或多个以\b
- 字边界(如果名称中包含Unicode字母,则删除。)答案 1 :(得分:0)
如果以这种方式执行,它应该可以工作:
var str = "I want to tag this @user here";
var patt = new RegExp("@([^\\s\\n]+)");
var result = patt.exec(str)[1];