Javascript正则表达式匹配字符串中以“#”开头的任何单词

时间:2012-11-25 18:45:15

标签: javascript regex

我是正则表达式的新手。我试图在一个不包含换行符的字符串中匹配任何以'#'开头的单词(内容已经在换行符中分割)。

示例(不工作):

var string = "#iPhone should be able to compl#te and #delete items"
var matches = string.match(/(?=[\s*#])\w+/g)
// Want matches to contain [ 'iPhone', 'delete' ]

我正在尝试匹配'#'的任何实例,并在它之后抓住它,只要它后面至少有一个字母,数字或符号。空格或换行符应该结束匹配。 '#'应该以字符串开头或以空格开头。

这个PHP解决方案似乎很好,但它使用了一种向后看的类型的功能,我不知道JS regex是否具有: regexp keep/match any word that starts with a certain character

3 个答案:

答案 0 :(得分:7)

var re = /(?:^|\W)#(\w+)(?!\w)/g, match, matches = [];
while (match = re.exec(s)) {
  matches.push(match[1]);
}

检查 this demo

答案 1 :(得分:1)

试试这个:

var matches = string.match(/#\w+/g);

答案 2 :(得分:0)

你实际上也需要匹配哈希。现在,您正在寻找跟随位置的单词字符,紧接着是几个不是单词字符的字符之一。由于显而易见的原因,这失败了试试这个:

string.match(/(?=[\s*#])[\s*#]\w+/g)

当然,前瞻现在是多余的,所以你不妨删除它:

string.match(/(^|\s)#(\w+)/g).map(function(v){return v.trim().substring(1);})

返回所需的:[ 'iPhone', 'delete' ]

以下是演示:http://jsfiddle.net/w3cCU/1/