преобразовать положительные числа в '+' и отрицательные в '-' регулярное выражение / javasscript - PullRequest
0 голосов
/ 24 февраля 2019

Я не могу преобразовать строку

'1,2,3, -6,10, -2'

Мне нужен результат:

'+++ - + -'

все отрицательные числа должны быть

'-'

и положительными

'+'

мое решение:

 result.replace(/-1/g, "-")
.replace(/-2/g, "-")
.replace(/-3/g, "-")
.replace(/-4/g, "-")
.replace(/-5/g, "-")
.replace(/-6/g, "-")
.replace(/-7/g, "-")
.replace(/8/g, "-")
.replace(/-9/g, "-")
.replace(/1/g, "+")
.replace(/2/g, "+")
.replace(/3/g, "+")
.replace(/4/g, "+")
.replace(/5/g, "+")
.replace(/6/g, "+")
.replace(/7/g, "+")
.replace(/8/g, "+")
.replace(/9/g, "+")

работает нормально, может быть короче?

Ответы [ 3 ]

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

Вы можете разбить строку и проверить знак.

var string = '1,2,3,-6,10,-2',
    result = string
        .split(',')
        .map(v => '+-'[+(v < 0)])
        .join('');
        
console.log(result);
0 голосов
/ 24 февраля 2019

Должно ли быть использование Regex или это может быть только JS?И всегда ли строка состоит из Ints и использует split, используя ","?Т.е. всегда ли это будет что-то вроде «1, -234,4,1, -124» в дополнение к вашему примеру?

Если это так, вы можете использовать Math.sign() функция.

Опять же, этот результат не использует Regex, что я не уверен, если это требование "ДОЛЖЕН ИМЕТЬ".

const example = '1,2,3,-6,10,-2';
const result = example.split(',').map(d => Math.sign(d) >= 0 ? '+' : '-').join('');

console.log(result); // "+++-+-"

Split принимает разделитель ',', чтобы превратить строку в массив, который мы можем отобразить, тогда каждое отдельное строковое значение 'd' может иметь Math.sign, чтобы определить,это положительное или отрицательное число, и мы используем троичный оператор для возврата результата «+» или «-».join в конце превращает новый массив '+' и '-' в строку.

Опять же - только с использованием JS, а не Regex, что может не отражать то, что вам нужно.

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

Вместо этого я использовал бы функцию заменителя: сопоставьте необязательный - и числовые символы, за которыми следует необязательная запятая, и замените на -, если приведенное число отрицательное, в противном случае - +:

const input = '1,2,3,-6,10,-2';
console.log(
  input.replace(
    /(-?\d+),?/g,
    (_, str) => Number(str) < 0 ? '-' : '+'
  )
);

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

(-?\d+(?:\.\d+)?),?

Или без заменителяфункция:

const input = '1,2,3,-6,10,-2';
console.log(
  input
    .replace(/-\d+,?/g, '-')
    .replace(/\d+,?/g, '+')
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...