Javascript正则表达式只匹配以特定特殊字符开头的单词

时间:2017-08-03 12:18:42

标签: javascript regex

我试图仅匹配javascript中以#开头的单词,例如。在以下示例文本中,只有 #these 应匹配。

  

我只需匹配像#these这样的单词。   忽略像@#this,!#this和#ignore。

我越接近就在这里,

/(\B(#[a-z0-9])\w+)/gi

参考:https://regex101.com/r/wU7sQ0/114

4 个答案:

答案 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,注意捕获的文本,而不是整个匹配。

或修剪每场比赛:

&#13;
&#13;
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;
&#13;
&#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)

你可以试试这个,

&#13;
&#13;
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;
&#13;
&#13;