Javascript Regex соответствует тексту между тильдами - PullRequest
0 голосов
/ 26 марта 2011

Я чувствую себя идиотом, потому что я потратил много времени, пытаясь найти регулярное выражение, которое будет работать.

Строка: ~05276~^~0500~^~Turkey...

... означает, что можнобыть неограниченным количеством символов после.То, что я хочу, - это первое число без тильды.Я пытаюсь извлечь некоторые данные из текстового файла, и я думаю, что смогу понять остальное, если смогу понять, как это сделать.

Вот мое регулярное выражение в его нынешнем виде: /^~([\d]+)~/

Вот что я получаю:

[ '~05276~',
 '05276',
 index: 0,
 input: '~05276~^~0500~^~Turkey...' ]

Когда я использую оператор g (/^~([\d]+)~/g), я получаю только ~05276~, и я хочу получить 05726 (без тильд).

Я нашел несколько разных постов и ресурсов, но я не могу понять, почему это не работает, как я ожидаю.Вот что я нашел:

Регулярное выражение Javascript - как получить текст в фигурных скобках

Может ли JavaScript / NodeJS это сделать?1027 *

Вот мой код:

lineReader.eachLine(file, function (line) {
    var entry = {};

    entry.id = line.match(/^~([\d]+)~/);

    console.log(entry);
});

lineReader работает правильно и возвращает строку, как в моем примере строки выше.

Ответы [ 2 ]

2 голосов
/ 26 марта 2011

С вашим регулярным выражением (почти) все в порядке, но вы, вероятно, не правильно его используете.Вот что я бы сделал, если бы хотел получить массив чисел:

 var array = [];
 yourString.replace(/~(\d+)~/g, function(_, n) { array.push(n); });

Что вам действительно не нужно, так это ведущий якорь "^".

1 голос
/ 27 марта 2011

Регулярное выражение /\d+/ требуется только для совпадения с первым числом после тильды в вашем примере.Тогда ваш метод будет следующим:

lineReader.eachLine(file, function (line) {
    var entry = {};
    entry.id = line.match(/\d+/);
    console.log(entry);
});

С помощью ввода "~05276~^~0500~^~Turkey" вы получите результат "05276".

Что касается полученного ответа массива, то это потому, что у вас есть круглые скобки, т.е.захватить группу.Если это совпадение с захваченной группой, начиная с крайней левой скобки - (\d+) в вашем случае - будет находиться во втором слоте массива результатов.Первый слот имеет полное совпадение, которое в вашем случае включает в себя тильды.

...