javascript匹配返回单词边界

时间:2014-05-02 16:10:05

标签: javascript regex

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

我正在尝试使用javacript.match()来搜索所有哈希(开头的#)单词。 我得到了一个返回的空白区域。

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

结果:

 ["#foo", " #bar"] 

注意#bar中的空格。
我应该如何更改我的RegEx以在返回.match时排除边界?
感谢您的帮助!!

2 个答案:

答案 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);
相关问题