Regex в javascript, пытается найти соответствие, но, похоже, не работает с $ - PullRequest
0 голосов
/ 14 декабря 2018

РЕДАКТИРОВАТЬ: Этот вопрос является другим.Регулярное выражение прекрасно работает, что все прислали мне.Проблема в том, что знак $ НЕ работает на моей строке, но работает на других.Я не могу понять, почему, и я разместил свою функцию ниже.

Мне нужно найти число в конце строки, оно будет примерно таким: L

Сумма моей цели: 25,00 $ /$ 100,00.

Я пытался

var matches = fileDataResult.match(/\d+$/);

, но он возвращает ноль, я пробовал без $, и он возвращает 25, без .00.

Какмогу ли я получить переменную как число для первых (25,00, с десятичными знаками) и другую переменную для 100,00, а также с десятичными.Мне нужны переменные отдельно, чтобы я мог работать с ними, но я думаю, что регулярное выражение не работает, потому что оно даже не будет работать со знаком $ ... у кого-нибудь есть предложения?Это в javascript.

edit: вот моя функция, она читает .txt файл и получает строку.Я могу просто утешить строку console.log, и она будет работать, но она не будет работать, если я использую $ в регулярном выражении!

function fileReaderFunc(file) {
    const fileReader = new FileReader();
    fileReader.onload = function() {
        let fileDataResult = '';
        const fileData = fileReader.result;
        fileDataResult = fileData.toString();

        console.log(fileDataResult);

        let str = fileDataResult;
        let reg = /\d+(\.\d+)?$/g;
        console.log(str.match(reg));
    };
    fileReader.readAsText(file);
}

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

let str = "My Goal Amount: $25.00/$100.00.";
str = str.substring(-1,str.length-1);  // remove the terminal period
let reg = /\$.+\$.+$/g;
let res = str.match(reg);
let arr = res[0].split('/');
let [num1,num2] = arr;                


console.log("1st: ", num1.substring(1, num1.length));
console.log("2nd: ", num2.substring(1, num2.length));

Оказывается, это регулярное выражение проще, чем можно предположить, так как сам текст содержит знаки доллара.Можно создать регулярное выражение, которое ищет буквальный знак доллара, за которым следуют другие символы, а затем второй буквальный знак доллара, за которым следуют другие символы от конца строки, отмеченные символом доллара, за вычетом любой косой черты, которая обозначает конец строки.,

Совпадение сохраняется в массиве результатов, содержащем один элемент, строковое значение которого затем разделяется на буквенную косую черту.Результаты затем сохраняются в массиве обр.Затем значения, хранящиеся в массиве, присваиваются переменным num1 и num2 посредством деструктуризации массива.

Если вы предпочитаете более сфокусированное регулярное выражение, вы также можете кодировать следующим образом:

let s = "My Goal Amount: $25.00/$100.00.";
s = s.substring(-1, s.length - 1);
let reg = /\$\d+\.\d+.\$\d+\.\d+$/;
let replaced = s.match(reg)[0].replace(/\$/g, "");
console.log(replaced.split("/"));

Если вы пренебрегаете обрезкой строки s конечного периода, то регулярное выражение не будет совпадать со строкой, что приведет к нулю.Это регулярное выражение задает шаблон в конце строки, который начинается со знака доллара, за которым следуют одна или несколько цифр, затем точка и одна или несколько цифр.Шаблон продолжается сопоставлением другого символа (в данном случае с косой чертой), а затем со знаком доллара, за которым следуют одна или несколько цифр, следующий за точкой и снова одна или несколько цифр.

0 голосов
/ 14 декабря 2018

Прежде всего \d+ не соответствует .

Вы можете использовать это

\d+(\.\d+)?$

Пояснение

  • \d+ - соответствует одной или нескольким цифрам.
  • (\.\d+)? соответствует ., за которыми следует одна или несколько цифр.(? делает это необязательным)

let str = "abc 125.00";
let reg = /\d+(\.\d+)?$/g;
console.log(str.match(reg))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...