我无法转换字符串
'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, "+")
它工作正常,会缩短吗?
答案 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);