需要使用正则表达式将大学课程代码拆分为前缀和后缀

时间:2017-02-22 20:21:42

标签: javascript regex

我需要将大学课程代码拆分为前缀和后缀。例如CSE1011分为Prefix CSE和Suffix 1011。前缀可以是2个或更多个字母,后缀可以是无/ 3个或更多。到目前为止,我已经提出了这个RegEx:

/([A-Z]{2,})(?:\s*)([0-9]{3,})?$/g

var courscrCode = 'CSE1011';
var courseRegex = /([A-Z]{2,})(?:\s*)([0-9]{3,})?$/g;
var splitted = courseRegex.exec(courscrCode);
console.log(splitted);

也试了这个。我越来越匹配了

var courscrCode = 'CSE1011';
var courseRegex = /([A-Z]{2,})(?:\s*)([0-9]{3,})?$/g;

if (courscrCode.match(courseRegex)) {
  var splitted = courscrCode.split(courseRegex);
  console.log(splitted.length);
  if (splitted.length > 1) {
    splitted.forEach(function(value, index) {
      if ((value != '') && (value != undefined))
        console.log(value, index);
    });
  }
} else {
  console.log('course code mangled');
}

我需要一个解决方案,我将获得正好2个子字符串前缀和后缀。现在我得到更多2.我也对任何其他解决方案持开放态度

2 个答案:

答案 0 :(得分:2)

正如Terry在上面提到的,MDN声明正则表达式返回的数组将始终包含匹配的文本作为第一项。下面的代码将删除第一个元素。



var courscrCode = 'CSE1011';
var courseRegex = /([A-Z]{2,})(?:\s*)([0-9]{3,})?$/g;
var splitted = courseRegex.exec(courscrCode);
splitted.splice(0,1);
console.log(splitted);




答案 1 :(得分:1)

SECOND 示例代码中的splitted数组是:

 ["", "CSE", "1011", ""]
  • 如果您的输入文字courscrCode始终是一个课程代码,您应该在[1]中找到前缀,在[2]中找到数字

  • 如果输入文字可能不仅仅是要验证的课程代码,则需要进行一些更改。

注意:数组中的第一个空项是CSE之前的所有字符,数组中的最后一项是1011之后的所有字符。 它不是完全匹配的值



     var courscrCode = 'CSE1011';
     var courseRegex = /([A-Z]{2,})(?:\s*)([0-9]{3,})?$/g;
     var prefix = '' ;
     var suffix = '' ;     
     if (courscrCode.match(courseRegex)) {
       var splitted = courscrCode.split(courseRegex);
       console.log(splitted.length);
       if (splitted.length > 1) {
         prefix = splitted[1]; 
         suffix = splitted[2];
         //or:
         splitted.splice(0,1);
         splitted.splice(2,1);
         console.log(splitted);
       }
     } else {
       console.log('course code mangled');
     }