在正则表达式中的某些数字(时间格式)之前找到一个空格

时间:2017-09-12 14:16:36

标签: javascript node.js regex

我有一个字符串,我想要一个正则表达式来查找数字之前是否有空格,如果是,则在此之前添加一个空格。 例如:" TAXI CABS ONLY THURS-FRI-SAT 11:30 PM-03:00" 结果:" TAXI CABS只有THURS-FRI-SAT 11:30 PM-3:00 AM"

2 个答案:

答案 0 :(得分:1)

我不是正则表达专家,但最终得到了这两个变体:

  1. 使用回调函数作为replace方法的第二个参数的第一个变体:
  2. 
    
    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);
    
    
    

    1. 使用表达式作为replace方法的第二个参数的第二个变体:
    2. 
      
      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,1: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);
      
      
      

答案 1 :(得分:0)

为什么不检查一个数字是否与一个字母相邻,如果是,在它们之间加一个空格?

检查所有数字[0-9],然后检查字母是否与[A-Zz-A]相邻。然后用空格替换第n个字符(由$1定义)并将原始字符放在$2位置。

let str = 'TAXI CABS ONLY THURS-FRI-SAT 11:30PM-3:00AM';
str = str.replace(/([0-9])([A-Za-z])/ig, '$1 $2');