我有一个字符串,我想要一个正则表达式来查找数字前面是否有空格,如果有,则在前面添加一个空格。 例如:“出租车仅限周四、周五和周六 11:30PM-3:00AM” 结果:“出租车仅限周四、周五、周六 11:30 PM-3:00 AM”
最佳答案
我不是正则表达式专家,但最终得到了这两种变体:
- 第一个变体使用回调函数作为
replace
方法的第二个参数:
var str = 'TAXI CABS ONLY THURS-FRI-SAT 11:30PM-3:00AM';
var strUpdated = str.replace(/\d?\d:\d?\d(AM|PM)/g, function(m){
return m.replace(/(AM|PM)/g, " $1");
});
console.log('old: ' + str);
console.log('new: ' + strUpdated);
- 使用表达式作为
replace
方法的第二个参数的第二个变体:
var str = 'TAXI CABS ONLY THURS-FRI-SAT 11:30PM-3:00AM';
var strUpdated = str.replace(/(\d?\d:\d?\d)(AM|PM)/g, "$1 $2");
console.log('old: ' + str);
console.log('new: ' + strUpdated);
console.log('----------------------------------');
var str = 'Another test 1:22 AM. This 12:05PM and this 12:50PN ';
var strUpdated = str.replace(/(\d?\d:\d?\d)(AM|PM)/g, "$1 $2");
console.log('old: ' + str);
console.log('new: ' + strUpdated);
现在我将尝试解释正则表达式的作用:)
(\d?\d:\d?\d)
- 这将匹配 1:1、11:22、1:22、11:2 等数字,刹车用于创建一个组,以便稍后可以在替换正则表达式中使用它(替换方法的第二个参数)(AM|PM)
- 这是另一个组(我们在放置括号时创建的)以匹配文字 AM 或 PM
编辑(响应 comment )
我可以快速建议的是在另一个正则表达式中处理诸如 11AM-6PM OR 8A-6P
的情况,而不是使当前的情况复杂化。看一下下面的代码 - 第二个 replace
正在完成这项工作:
var str = 'TAXI CABS ONLY THURS-FRI-SAT 11:30PM-3:00AM \r\n 11AM-6PM OR 8A-6P 11M-6M OR 12A-15P';
var strUpdated = str.replace(/(\d?\d:\d?\d)(AM|PM)/g, "$1 $2").replace(/(\d?\d)(AM|PM|A|P)/g, "$1 $2");
console.log('old: ' + str);
console.log('new: ' + strUpdated);
关于javascript - 在正则表达式中查找某些数字(时间格式)之前的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46178819/