在javascript中如何添加或删除数量字符串中的's'

时间:2014-11-04 16:56:44

标签: javascript string replace conditional-statements

我有一个从数据库返回的字符串,例如7 Months 5 Days

问题是当它是1个月1天时,它仍显示为1 Months 1 Days,请注意sMonths中的字母Days

我不允许使用像1 Month(s) 1 Day(s)这样的括号。

请问如何制作条件,如果不到2天,则删除s

以下不起作用。我该怎么办?

JS

var YYMM = '1 Months 1 Days'; // simulated data.

if (YYMM.indexOf('1') > -1) {
  YYMM.replace('s', '');

  console.log('YYMM is: ', YYMM);
}

非常感谢

4 个答案:

答案 0 :(得分:2)

只有一个案例,所以:

'1 Months 1 Days'.replace(/\b1 Months/, '1 Month')
                 .replace(/\b1 Days/, '1 Day');

会奏效。



document.getElementById('div1').textContent 
    = '1 Months 1 Days'.replace(/\b1 Months/, '1 Month')
                       .replace(/\b1 Days/, '1 Day');

document.getElementById('div2').textContent 
    = '12 Months 21 Days'.replace(/\b1 Months/, '1 Month')
                       .replace(/\b1 Days/, '1 Day');

1 Months 1 Days -->
<div id="div1"></div>

12 Months 21 Days -->
<div id="div2"></div>
&#13;
&#13;
&#13;

答案 1 :(得分:2)

使用replace的单一正则表达式可以做到:

&#13;
&#13;
var reg = /\b1\b\s(Month|Day)s/g;
alert( '1 Months 1 Days'.replace(reg, '1 $1') );
alert( '11 Months 21 Days'.replace(reg, '1 $1') );
alert( '12 Months 1 Days'.replace(reg, '1 $1') );
&#13;
&#13;
&#13;

答案 2 :(得分:1)

在更改字符串之后简单地拆分字符串和concat,就像这样

var YYMM = '1 Months 1 Days';
YYMM = YYMM.split(' ');

if (parseInt(YYMM[0], 10) < 2) {
    YYMM[1] = 'Month';
}

if (parseInt(YYMM[2], 10) < 2) {
    YYMM[3] = 'Day';
}

YYMM = YYMM.join(' ');
console.log(YYMM);
# 1 Month 1 Day

这样做的好处,很容易理解。但您可以使用三元运算符编写if条件,如此

YYMM[1] = 'Month' + (parseInt(YYMM[0], 10) < 2 ? '' : 's');
YYMM[3] = 'Day'   + (parseInt(YYMM[2], 10) < 2 ? '' : 's');

答案 3 :(得分:0)

您可以尝试这样的事情:

var str = '1 Months 3 Days';
var parts = str.split(' ');

if(parts[0] === '1') {
  parts[1] = parts[1].slice(0, -1);
}

if(parts[2] === '1') {
  parts[3] = parts[3].slice(0, -1);
}

var result = parts.join(' ');