正则表达式不是我的强项。我希望你们中的一位可以帮助我。
我正在尝试使用 javacript.match() 来搜索所有散列(# 开头)单词。 我得到一个返回的空白。
string = "#foo #bar"
result = string.match(/(^|\W)(#[a-z\d][\w-]*)/ig);
console.log(result)
结果:
["#foo", " #bar"]
注意#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"]
关于javascript 匹配返回单词边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23432489/