Как я могу разделить строку с несколькими разделителями в JavaScript?

Используйте DOMParser() , чтобы преобразовать responseText в дерево DOM с возможностью поиска. Кроме того, ваши попытки поиска / использования чего-либо, полученного из responseText, должны происходить внутри функции onload.

Используйте такой код:

GM_xmlhttpRequest ( {
    ...
    onload:     parseAJAX_ResponseHTML,
    ...
} );

function parseAJAX_ResponseHTML (respObject) {
    var parser      = new DOMParser ();
    var responseDoc = parser.parseFromString (respObject.responseText, "text/html");

    console.log (responseDoc.getElementsByTagName('div'));
    console.log (responseDoc.getElementById('result_0'));
}

Конечно, также убедитесь, что узел с id result_0 фактически находится в возвращенном HTML. (Использование Firebug, Wireshark и т. Д.)

438
задан mikemaccana 8 April 2015 в 13:50
поделиться

5 ответов

Передача в regexp как параметр:

js> "Hello awesome, world!".split(/[\s,]+/)
Hello,awesome,world!

Отредактированный для добавления:

можно получить последний элемент путем выбора длины массива минус 1:

>>> bits = "Hello awesome, world!".split(/[\s,]+/)
["Hello", "awesome", "world!"]
>>> bit = bits[bits.length - 1]
"world!"

... и если шаблон не соответствует:

>>> bits = "Hello awesome, world!".split(/foo/)
["Hello awesome, world!"]
>>> bits[bits.length - 1]
"Hello awesome, world!"
636
ответ дан Aaron Maenpaa 8 April 2015 в 23:50
поделиться

Возможно, необходимо сделать своего рода строковую замену для превращения одного разделителя в другой разделитель, таким образом, у Вас тогда только есть один разделитель для контакта с в разделении.

3
ответ дан TheTXI 8 April 2015 в 23:50
поделиться

Можно передать regex в оператор разделения JavaScript. Например:

"1,2 3".split(/,| /) 
["1", "2", "3"]

Или, если Вы хотите позволить нескольким разделителям вместе действовать как одно единственное:

"1, 2, , 3".split(/(?:,| )+/) 
["1", "2", "3"]

(Необходимо использовать неполучение (?:) parens, потому что иначе это становится соединенным назад в результат. Или можно быть умными как Aaron и использовать класс символов.)

(Примеры, протестированные в Safari + FF)

167
ответ дан Jesse Rusak 8 April 2015 в 23:50
поделиться

Я обеспечу классическую реализацию для такой функции. Код работает почти во всех версиях JavaScript и так или иначе оптимален.

  • Это не делает использования regex, который трудно поддержать
  • , Это не делает использует новые функции JavaScript
  • , который Это не делает использует несколько .split () .join () вызов, которые требуют большего количества памяти компьютера

Просто чистый код:

var text = "Create a function, that will return an array (of string), with the words inside the text";

println(getWords(text));

function getWords(text)
{
    let startWord = -1;
    let ar = [];

    for(let i = 0; i <= text.length; i++)
    {
        let c = i < text.length ? text[i] : " ";

        if (!isSeparator(c) && startWord < 0)
        {
            startWord = i;
        }

        if (isSeparator(c) && startWord >= 0)
        {
            let word = text.substring(startWord, i);
            ar.push(word);

            startWord = -1;
        }
    }

    return ar;
}

function isSeparator(c)
{
    var separators = [" ", "\t", "\n", "\r", ",", ";", ".", "!", "?", "(", ")"];
    return separators.includes(c);
}

Вы видите, что код работает в детской площадке: https://codeguppy.com/code.html? IJI0E4OGnkyTZnoszAzf

0
ответ дан 22 November 2019 в 23:03
поделиться

Мой осуществлять рефакторинг ответа @Brian

var string = 'and this is some kind of information and another text and simple and some egample or red or text';
var separators = ['and', 'or'];

function splitMulti(str, separators){
            var tempChar = 't3mp'; //prevent short text separator in split down
            
            //split by regex e.g. \b(or|and)\b
            var re = new RegExp('\\b(' + separators.join('|') + ')\\b' , "g");
            str = str.replace(re, tempChar).split(tempChar);
            
            // trim & remove empty
            return str.map(el => el.trim()).filter(el => el.length > 0);
}

console.log(splitMulti(string, separators))
0
ответ дан 22 November 2019 в 23:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: