正则表达式从数组项中删除哈希元素

时间:2013-08-29 16:19:24

标签: javascript regex

我使用regex从字符串中捕获主题标签:

var words = "#hashed words and some #more #hashed words";
var tagslistarr = words.match(/#\S+/g); 

console.log(tagslistarr);

这会返回一个这样的数组;

["#hashed", "#more", "#hashed"]

问题:如何从每个数组项中删除#哈希符号? 这就是我最终想要的

["hashed", "more", "hashed"]

4 个答案:

答案 0 :(得分:5)

尝试:

words.match( /#\S+/g ).map( function(x) { return x.replace(/^#/,''); } );

更好的方法是零宽度断言;遗憾的是,JavaScript不支持后视断言,只是前瞻。 (顺便说一句,这里有一篇关于mimicking lookbehind assertions in JavaScript的博客文章。我不能说我对任何解决方案都非常关心,但它仍然是很好的阅读。我当然希望看到后面的断言能够进入ES6。)< / p>

正如SimonR在下面的评论中所指出的,Array.prototype.map在IE8及以下版本中不可用。但是,填充很容易:

if( !Array.prototype.map ) {
    Array.prototype.map = function(f) { 
        var r = []; 
        for( var i=0; i<this.length; i++ ) r[i] = f(this[i]); 
        return r; 
    }
}

答案 1 :(得分:4)

var words = "#hashed words and some #more #hashed words";
var tagslistarr = words.match(/#\S+/g); 
tagslistarr = tagslistarr.map(function(x) { return x.substr(1); } );
console.log(tagslistarr)

打印

["hashed", "more", "hashed"]

答案 2 :(得分:2)

在正则表达式中使用捕获组:

words.replace(/#(\S+)/g, '$1');

修改

将它们作为数组:

var tagslistarr = words.match(/#\S+/g);

for( var i = 0, l = tagslistarr.length; i < l; i++ ) {
  tagslistarr[ i ] = tagslistarr[ i ].substr( 1 );
}

答案 3 :(得分:1)

var words = "#hashed words and some #more #hashed words";
var regexp = /#(\S+)/g; // Capture the part of the match you want
var results = [];
var match;
while((match = regexp.exec(words))) // Loop through all matches
  results.push(match[1]);           // Add them to results array

console.log(results);