RegEx不是我的强项。我希望你们中的一个可以帮助我。
我正在尝试使用javacript.match()来搜索所有哈希(开头的#)单词。 我得到了一个返回的空白区域。
string = "#foo #bar"
result = string.match(/(^|\W)(#[a-z\d][\w-]*)/ig);
console.log(result)
结果:
["#foo", " #bar"]
注意#bar中的空格。
我应该如何更改我的RegEx以在返回.match时排除边界?
感谢您的帮助!!
答案 0 :(得分:1)
在(^|\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"]
答案 1 :(得分:0)
您需要使用此语法来提取捕获组:
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);