我试图仅匹配javascript中以#开头的单词,例如。在以下示例文本中,只有 #these 应匹配。
我只需匹配像#these这样的单词。 忽略像@#this,!#this和#ignore。
我越接近就在这里,
/(\B(#[a-z0-9])\w+)/gi
答案 0 :(得分:4)
使用空白边界(?:^|\s)
:
var rx = /(?:^|\s)(#[a-z0-9]\w*)/gi;
var s = "I need to match only words like #these. \nIgnore the ones like @#this , !#this and in#ignore.";
var m, res=[];
while (m = rx.exec(s)) {
res.push(m[1]);
}
console.log(res);

<强>详情:
(?:^|\s)
- 匹配字符串或空格的开头(#[a-z0-9]\w*)
- 第1组(m[1]
):#
,然后是字母数字字符,后跟0个或多个字符(字母,数字,_
个符号)。 请参阅the regex demo,注意捕获的文本,而不是整个匹配。
或修剪每场比赛:
var rx = /(?:^|\s)(#[a-z0-9]\w*)/gi;
var s = "I need to match only words like #these. \nIgnore the ones like @#this , !#this and in#ignore.";
var results = s.match(rx).map(function(x) {return x.trim();}); // ES5
// var results = s.match(rx).map(x => x.trim()); // ES6
console.log(results);
&#13;
答案 1 :(得分:1)
为什么不先搜索开始或使用空格。见regex / #|^#
答案 2 :(得分:1)
我有点改变你的正则表达式以获得你想要的东西。
var p = "I need to match only words like #these. Ignore the ones like @#this , !#this and in#ignore."
[^@!a-z$]\#[a-z]+
这只会匹配#these,你可以通过在第一个方括号之间添加来排除你不想要的东西
答案 3 :(得分:0)
你可以试试这个,
txt = "I need to match only words like #these. Ignore the ones like @#this , !#this and in#ignore."
console.log(/(^|\s)(#+\w+)/g.exec(txt))
&#13;