Antonchik
@Antonchik
Программирую на HTML

Как собрать такой массив из строки?

Добрый день. Есть у меня к примеру такая строка "слово1 слово2 [слово слово слово] слово3" как мне с этой строки сделать такой массив: ['слово1', 'слово2', '[слово слово слово]', 'слово3']? Может подскажите регулярное выражения, которое бы искало пробелы в строке и игнорировало пробелы в квадратных скобках?
  • Вопрос задан
  • 373 просмотра
Решения вопроса 2
mlnkv
@mlnkv
JavaScript Developer
var str = "слово1 слово2 [слово слово слово] слово3";
var result = [];
str.replace(/(\[.+?\]|\S+)/g, function(m) {
  result.push(m);
  return "";
})
console.log("Result:", result)
// ["слово1", "слово2", "[слово слово слово]", "слово3"]
Ответ написан
kulakoff
@kulakoff
Vue.js developing
var str = "слово [слово слово] слово [слово]"
var res = str.match(/\[.+?\]|\S+/g)
console.log(res)
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@Quieteroks
php программист
1) Использовать json и не писать свой парсер.
2) Парсить строку функциями для работы со строками.
3) Попробовать себя в парсинге при помощи регулярного выражения.
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
Может, не самый оптимальный вариант – заменить пробелы внутри скобок на какой-то символ, который в «нормальном» тексте точно не встретится. Например, специсимвол неразрывного пробела. После этого можно бить по пробелам, и после этого обратно заменить спец-символ на пробелы:
function convert(s) {

  var c, i, bo = 0, div = "\u0083", arr = s.split('');

  for( i = 0; i < arr.length; i++) {
    c = arr[i];
    if( c === '[') {
      bo++;
    } else if( c === ']') {
      bo--;
    } else if( bo > 0 && c === ' ') {
      arr[i] = div;
    }
  }

  return arr
    .join('')
    .split(' ')
    .map( function(s){ return s.replace( new RegExp(div,'g'), ' ')})
  ;
}

var s = "слово1 слово2 [слово слово слово] слово3";
convert(s) // ["слово1","слово2","[слово слово слово]","слово3"]
Ответ написан
Как то так
var str = '1 2 3 4 5 6 7 8 9 10';
var arr = str.split(' ');
// Переменная arr будет содержать элементы [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Ответ написан
v3shin
@v3shin
Веб-шаман
var parts = 'слово1 слово2 [слово слово слово] слово3 [слово] [слово слово ] слово4'.split(' ');
var res = [], flag = false;
for(var i = 0, il = parts.length; i < il; ++i){
    var f = flag;
    if(parts[i][0] === '[') flag = true;
    if(parts[i][parts[i].length-1] === ']') flag = false;
    if(f) res[res.length-1] += ' '+parts[i];
    else res[res.length] = parts[i];
}
console.log(res);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы