我有一个从数据库返回的字符串,例如7 Months 5 Days
。
问题是当它是1个月1天时,它仍显示为1 Months 1 Days
,请注意s
和Months
中的字母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);
}
非常感谢
答案 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;
答案 1 :(得分:2)
使用replace的单一正则表达式可以做到:
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;
答案 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(' ');