我需要将大学课程代码拆分为前缀和后缀。例如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.我也对任何其他解决方案持开放态度
答案 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');
}