Разрешить выражение минус знак узлаJS? - PullRequest
0 голосов
/ 21 февраля 2019

В настоящее время я передаю параметры URL как таковые h-3678/q-55/con-0.11, но, поскольку мои последние разработки, мне нужно иметь возможность передавать знак минуса внутри параметра con , например: h-3678/q-55/con--0.5/, но выдает ошибкииспользуя выражения, которые я получил прямо сейчас?

let con_match = str.match(/(con-[^\\]+?)(?=\/)/);
let con = 0;
if (con_match && con_match.length) {
    con = con_match.shift().split('-').pop();
}

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019
//var str = 'h-3678/q-55/con-0.11';
var str = 'h-3678/q-55/con--0.5/';

let con_match = str.match(/(con\-([^\/]+)?)/);
let con = 0;
if (con_match && con_match.length) {
    console.log(con_match);
    con = con_match[2];
}

console.log(con);

Первый возвращает: 0,11

Второй возвращает: -0,5

0 голосов
/ 21 февраля 2019

Если ваш номер всегда идет после con-, вы можете использовать

let strs = ["h-3678/q-55/con-0.11", "h-3678/q-55/con--0.5/"];
for (let i=0; i < strs.length; i++) {
  let str = strs[i];
  console.log(str);
  let con_match = str.match(/\bcon-(-?\d+(?:\.\d+)?)/);
  let con = 0;
  if (con_match) {
    con = con_match[1]; 
  }
  console.log("Result:", con);
}

Подробности регулярного выражения

  • \b - граница слова (граница слова \b будет соответствовать только con когда оно не является частью другого слова и не предшествует цифре или _)
  • con- - буквенная подстрока
  • (-?\d+(?:\.\d+)?) - группа 1 (con_match[1] значение):
    • -? - необязательный дефис
    • \d+ - 1+ цифр
    • (?:\.\d+)? - 1 или 0 вхождений .а затем 1+ цифр

Предполагая, что может быть любой текст между con и последним числом , вы можете извлечь совпадение con с/\b(con-[^\/]+)/ регулярное выражение, а затем, после получения значения группы 1, извлеките число из его конца:

let strs = ["h-3678/q-55/con-0.11", "h-3678/q-55/con--0.5/"];
for (let i=0; i < strs.length; i++) {
  let str = strs[i];
  console.log(str);
  let con_match = str.match(/\b(con-[^\/]+)/);
  let con = 0;
  if (con_match) {
    let m = con_match[1].match(/-(-?\d+(?:\.\d+)?)$/)
    if (m) { 
      con = m[1]; 
    }
  }
  console.log("Result:", con);
}

Второе регулярное выражение: /-(-?\d+(?:\.\d+)?)$/:

  • - - дефис
  • (-?\d+(?:\.\d+)?) - группа 1:
    • -? - необязательный дефис
    • \d+ - 1+ цифр
    • (?:\.\d+)? - 1 или 0 вхождений . и затем 1+цифры
  • $ - конец строки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...