Расщепление строки из первого вхождения символа - PullRequest
5 голосов
/ 26 мая 2011

У меня есть несколько строк текста в файлах журнала в таком формате:

topic, this is the message part, with, occasional commas.

Как я могу отделить строку от первой запятой, чтобы тема и остальная часть сообщения были в двух разных переменных?

Я пытался использовать этот вид разделения, но он не работает, когда в части сообщения больше запятых.

[topic, message] = whole_message.split(",", 2);

Ответы [ 6 ]

12 голосов
/ 26 мая 2011

Используйте регулярное выражение, которое получает "все, кроме первой запятой". Итак:

whole_message.match(/([^,]*),(.*)/)

[1] будет темой, [2] будет сообщением.

4 голосов
/ 26 мая 2011

Такого рода декомпозиционное назначение не работает в Javascript (в настоящее время).Попробуйте это:

var split = whole_message.split(',', 2);
var topic = split[0], message = split[1];

edit - хорошо, поэтому "split ()" немного не работает;попробуйте это:

var topic, message;
whole_message.replace(/^([^,]*)(?:,(.*))?$/, function(_, t, m) {
  topic = t; message = m;
});
3 голосов
/ 26 мая 2011

Метод javascript String.split() не работает (по крайней мере, если вы ожидаете того же поведения, что и методы split() другого языка).

Пример такого поведения:

console.log('a,b,c'.split(',', 2))
> ['a', 'b']

а не

> ['a', 'b,c']

как и следовало ожидать.

Попробуйте использовать вместо этого функцию разделения:

function extended_split(str, separator, max) {
    var out = [], 
        index = 0,
        next;

    while (!max || out.length < max - 1 ) { 
        next = str.indexOf(separator, index);
        if (next === -1) {
            break;
        }
        out.push(str.substring(index, next));
        index = next + separator.length;
    }
    out.push(str.substring(index));
    return out;
};  
2 голосов
/ 26 мая 2011

Здесь!

String.prototype.mySplit = function(char) { 
  var arr = new Array(); 
  arr[0] = this.substring(0, this.indexOf(char)); 
  arr[1] = this.substring(this.indexOf(char) + 1); 
  return arr; 
}

str = 'topic, this is the message part, with, occasional commas.'
str.mySplit(',');
-> ["topic", " this is the message part, with, occasional commas."]
1 голос
/ 26 мая 2011
var a = whole_message.split(",");
var topic = a.splice (0,1);

(если вы не любите делать сложные вещи)

0 голосов
/ 26 мая 2011

Почему бы не разделить запятыми, взять пункт [0] в качестве темы, а затем удалить тему (+,) из исходной строки?

Вы могли бы:

var topic = whole_message.split(",")[0]

(используя prototype.js)

var message = whole_message.gsub(topic+", ", "") 

(используя jQuery)

whole_message.replace(topic+", ", "")

Или быстрее, иди с josh.trow

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...