将正数转换为“ +”,将负数转换为“-” regex / javasscript

时间:2019-02-23 22:07:46

标签: javascript regex

我无法转换字符串

  

'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 :(得分:5)

我将改用替换函数:匹配可选的-和数字字符,后跟可选的逗号,如果强制数字为负,则替换为-,否则替换为{{1} }:

+

如果输入也可以包含十进制数字,则为其添加一个可选的非捕获组:

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

或者,没有替代功能:

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

答案 1 :(得分:3)

必须使用Regex还是只能使用JS?并且该字符串是否始终由Ints组成并使用“,”进行拆分?即除了您的示例之外,它还会总是像“ 1,-234,4,1,-124”之类的东西吗?

如果是这样,您也许可以使用Math.sign()函数。

同样,此结果未使用正则表达式,我不确定这是否是“必须拥有”的要求。

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而不使用正则表达式,这可能无法反映您的需求。

答案 2 :(得分:0)

您可以分割字符串并检查符号。

var string = '1,2,3,-6,10,-2',
    result = string
        .split(',')
        .map(v => '+-'[+(v < 0)])
        .join('');
        
console.log(result);