Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите из строки сделать массив с отфильтрованными словами (https://javascript.ru/forum/misc/71651-pomogite-iz-stroki-sdelat-massiv-s-otfiltrovannymi-slovami.html)

Александр3297 03.12.2017 21:49

Помогите из строки сделать массив с отфильтрованными словами
 
Помогите разобраться.
1. Имеем следующую строку
var tweet = 'Нужно выбрать только #heshtagone и #heshtegTwo из этой строки'
2. Задание: В результирующем массиве хэштеги должны быть без решетки
и если в слове хэштегов нет, то возвращается пустой массив.

Написал такую функцию:

function check (tweet) {
var result = [];

for (var i = 0; i < (tweet.split(/\s|\#/)).length; i++)

{var tweetTwo = (tweet.split(/\s|\#/))[i];
if (tweetTwo.indexOf(/\w+/) !== -1) {
result.push(tweetTwo);}
}}
но... не работает, перебрал уже кучу вариантов.
Не могу понять, что делаю не так и буду очень благодарен за любую помощь!

Aetae 03.12.2017 22:00

result = tweet.match(/#\S+/g)

рони 03.12.2017 22:23

Александр3297,
var tweet = 'Нужно выбрать только #heshtagone и #heshtegTwo из этой строки';

function check(tweet) {
    var result = [],
        h;
    for (var i = 0; i < tweet.length; i++) {
            if (tweet[i] == "#") {
            h = result.length;
            result[h] = ""
        } else if (/\S/.test(tweet[i]) && h !== void 0) result[h] += tweet[i];
        else h = void 0
    }
    return result
};

alert(check (tweet));

Александр3297 03.12.2017 22:58

Спасибо!очень выручили!

ruslan_mart 03.12.2017 23:09

function check(tweet) {
	var data = [],
		pattern = /#(\S+)/g,
		result;

	while(result = pattern.exec(tweet)) {
		data.push(result[1]);
	}

	return data;
}

console.log(check('Нужно выбрать только #heshtagone и #heshtegTwo из этой строки'));


Или

function check(tweet) {
	var result = tweet.match(/#(\S+)/g);
	return result ? result.map(function(item) {
		return item.substr(1);
	}) : [];
}

console.log(check('Нужно выбрать только #heshtagone и #heshtegTwo из этой строки'));


Или (ES6)

const check = tweet => (tweet.match(/#(\S+)/g) || []).map(item => item.substr(1));

console.log(check('Нужно выбрать только #heshtagone и #heshtegTwo из этой строки'));


Часовой пояс GMT +3, время: 10:22.