のようなRegExpを使用します。つまり、スペースまたは行頭、次に、非スペースの順に使用します。/(?:\s|^)#([^\s]+)/g
String.prototype.match
#
var m = 'This is my message #message #lol #haha'.match(/(?:\s|^)#([^\s]+)/g);
// [" #message", " #lol", " #haha"]
次に、これらを好みのループでループできます。for
var i, found = [], u;
for (var i = 0; i < m.length; ++i) {
u = m[i];
if (u.charAt(1) === '#') u = u.slice(2);
else u = u.slice(1);
found.push(u);
}
found; // ["message", "lol", "haha"]
同じRegExpを使用すると、キャプチャ グループの設定方法により、 を使用して同時にストリップとキャッチを行うことができますString.prototype.replace
。
var found = [], str = 'This is my message #message #lol #haha';
str = str.replace(
/(?:\s|^)#([^\s]+)/g,
function (m, keyword) {
found.push(keyword);
return '';
}
);
str; // "This is my message"
found; // ["message", "lol", "haha"]
replace
ここでのわずかな変更により、それらを削除せずに使用してキャプチャすることもできます(関数return m
内で、または文字列の別のコピーを保持するだけです)。