Home Articles

Javascript Regex匹配任何以'#'开头的单词

Asked
Viewed 1553 times
6

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

示例(不工作):

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' ]

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

这个PHP解决方案看起来不错,但它使用了一个向后看的类型的功能,我不知道JS正则表达式有:regexp keep/match any word that starts with a certain character

3 Answers

  • 6

    试试这个:

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

    检查 this demo .

  • 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/

Related