Это мой код. Он по-прежнему возвращает ноль, и я не знаю, почему!
var tName = "18.56x^2 - 5.45x -3.78";
abc = tName.replace(/x/g, "").replace("^2", "").replace(/\s/g, "");
console.info(abc);
$re = "/-?\\d+(?:\\.\\d+)?/m";
$str = abc.toString();
console.info($str.match($re));
Также $str = abc.toString();
не нужен
Ваше регулярное выражение в порядке, вы просто настроили его как строку вместо литерала регулярного выражения.
Когда вы создаете константы RegExp, вы хотите либо использовать конструктор RegExp()
(для построения из строк), либо просто литерал регулярного выражения. В настоящее время вы строите обычную строку, которая выглядит как регулярное выражение, но таковой не является.
Попробуйте отредактировать эту строку следующим образом:
$re = /-?\d+(?:\.\d+)?/m;
Редактировать:
Чтобы получить доступ к самой строке, вам просто нужно использовать индекс 0.
var mat = $str.match($re);
console.info(mat[0])
спасибо, это сработало, однако я не получил того, что хотел, я думаю, что мое регулярное выражение неверно...
я получил: ['18.56', индекс: 0, ввод: '18.56-5.45-3.78', группы: не определено]
Да, это «совпадающий объект», попробуйте добавить [0]
в конце, чтобы сослаться на совпадающую строку.
используйте регулярное выражение (не строку) в качестве параметра String.prototype.match()
следующим образом:
var tName = "18.56x^2 - 5.45x -3.78";
abc = tName.replace(/x/g, "").replace("^2", "").replace(/\s/g, "");
$re = /-?\d+(?:\.\d+)?/m;
$str = abc.toString();
console.info($str.match($re));
Вам нужно
Попробуйте с этим
const $re = /-?\d+(?:\.\d+)?/mg,
tName = "18.56x^2 - 5.45x -3.78",
abc = tName.replace(/x/g, "").replace("^2", "").replace(/\s/g, ""),
nums = [...abc.matchAll($re)].map(m => m[0]);
console.info(abc)
console.info(nums)
просто подсказка, которую вы можете использовать
https://regex101.com/
для отладки своего регулярного выражения