我使用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"]
答案 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);