RegEx-通过字符串解析特定单词

时间:2019-04-08 03:58:35

标签: javascript regex

我想解析一个字符串并找到所有的句柄(@ name )并将它们每个推入一个数组(虽然没有@),所以我可以遍历它们(带有forEach)并向他们发送警报。每个手柄由一个空格隔开。

Message example

5 个答案:

答案 0 :(得分:2)

您可以捕获@followedByName,然后替换@

let str = `@someName hey @someMoreNames`

let op = str.match(/(^|\s)@\w+/g).map(e=>e.trim().replace(/@/g,''))

console.log(op)

答案 1 :(得分:2)

如果只需要从一条推文中提取用户,则可以使用以下正则表达式:

/@([a-zA-Z0-9]+)/g

例如:

var string = '@JohnSmith @DylanThompson Hey guys!';
var numberPattern = /@([a-zA-Z0-9]+)/g;

var res = string.match(numberPattern);

console.log(res);

这会吐出来:

["@JohnSmith", "@DylanThompson"]

答案 2 :(得分:1)

尝试

let str= "Here @ann and @john go to @jane";

let m= str.match(/@\w+/g).map(x=>x.replace(/./,''));
                              
m.forEach(x=> console.log(x));

您还可以在正则表达式后面使用正向后视,但是Firefox yet不支持它(但它是ES2018的一部分):

let str= "Here @ann and @john go to @jane";

let m= str.match(/(?<=@)\w+/g);

m.forEach(x=> console.log(x));

其中(?<=@)\w+与@后面的单词匹配(不包括此字符-positive lookbehind

答案 3 :(得分:1)

您可以结合使用match来提取名称和slice来删除@

str = "@JohnSmith @DylanThompson Hey guys";
let arr = str.match(/@\w+/g).map(e=>e.slice(1));
console.log(arr);

答案 4 :(得分:0)

尝试一下:

var str= "Here @ann and @john go to @jane";
var patt = /@(\w+)/g;

while ( (arr = patt.exec(str)) !== null ) { console.log(arr[1]); }