javascript匹配返回单词边界

javascript匹配返回单词边界,javascript,regex,Javascript,Regex,RegEx不是我的强项。我希望你们中的一个能帮助我 我正在尝试使用javascript.match()搜索所有散列(在开头)单词。 我得到一个返回的空白 string = "#foo #bar" result = string.match(/(^|\W)(#[a-z\d][\w-]*)/ig); console.log(result) 结果: ["#foo", " #bar"] 请注意#栏中的空白。 我应该如何更改我的正则表达式以排除返回到.match中的边界? 谢谢你的帮助 之前不需要

RegEx不是我的强项。我希望你们中的一个能帮助我

我正在尝试使用javascript.match()搜索所有散列(在开头)单词。 我得到一个返回的空白

string = "#foo #bar"
result = string.match(/(^|\W)(#[a-z\d][\w-]*)/ig);
console.log(result)
结果:

 ["#foo", " #bar"] 
请注意#栏中的空白。
我应该如何更改我的正则表达式以排除返回到.match中的边界?
谢谢你的帮助

之前不需要
(^ |\W)
,因为
被视为非单词字符。您将获得空间,因为
\W
也将匹配空间

这个正则表达式将更好地工作:

var re = /(?:^|\s)(#[a-z\d][\w-]*)/g,
    matches = [],
    input = "#foo #bar abc#baz";
while (match = re.exec(input)) matches.push(match[1].trim());

console.log(matches);
//=> ["#foo", "#bar"]
编辑:避免循环:

var m = [];
var str = "#foo #bar abc#baz";
str.replace(/(^|\s)(#[a-z\d][\w-]*)/g, function($1) { m.push($1.trim()); return $1; } );

console.log(m);
//=> ["#foo", "#bar"]

您需要使用以下语法来提取捕获组:

var str = '#foo #bar';
var myRegexp = new RegExp('(?:^|\\W)(#[^\\W_][\\w-]*)', 'g');

var matchResult = myRegexp.exec(str);
var result = Array();

while (matchResult != null) {
    result.push(matchResult[1]);
    matchResult = myRegexp.exec(str);
}

console.log(result);
如果不想循环查看匹配结果,可以使用以下技巧:

var str = '#foo #bar';
var result = Array();

str.replace(/(?:^|\W)(#[^\W_][\w-]*)/g, function (m, g1) { result.push(g1); } );

console.log(result);

我对原始问题进行了编辑,以反映我正在寻找以哈希开头的单词。温和地提供的正则表达式将允许在单词的中间散列。哼,我本来想避免循环通过我的结果。谢谢你的回复。@cs45977:我想没有别的办法了。或者使用replace方法替换闭包。