我在库存管理程序中有一个相当孤立的情况,我们的货架位置具有特定格式,始终为Letter: Number-Letter-Number
,例如Y:1-E-4。我们大多数同事只需输入" y1e4"并且完成了它,但这显然会在数据库中产生不一致格式的问题。 JS RegExp是自动检测和格式化这些字母数字字符串的理想方式吗?我慢慢地围绕着JavaScript的Perl语法,但是这是一个简单的格式化其中一个字符串的例子吗?
答案 0 :(得分:1)
我将问题理解为"将BtnFemale
转换为LetterNumberLetterNumber
。
您可以使用
Letter: Number-Letter-Number
并替换为/^([a-z])(\d+)([a-z])(\d+)$/i
<强>详情:
$1: $2-$3-$4
- 字符串开头^
- 第1组(从替换模式引用([a-z])
)捕获任何ASCII字母(如$1
使模式不区分大小写)/i
- 第2组捕获1个或多个数字(\d+)
- 第3组,一封信([a-z])
- 第4组,一个数字(1位或更多位数)(\d+)
- 字符串结束。请参阅regex demo。
$
&#13;
或 - 如果字母必须转为大写字母:
var re = /^([a-z])(\d+)([a-z])(\d+)$/i;
var s = 'y1e2';
var result = s.replace(re, '$1: $2-$3-$4');
console.log(result);
&#13;
答案 1 :(得分:1)
spec:检测&#34; W:D-W-D&#34;的字符串格式或&#34; WDWD&#34;并返回&#34; W:D-W-D&#34;
此函数将接受任何格式,如果不匹配则返回undefined,如果匹配确实发生则返回格式化字符串。
function validateInventoryCode(input) {
var regexp = /^([a-zA-Z]+)(?:\:\s*)?(\d+)-?(\w+)-?(\d+)$/
var r = regexp.exec(input);
if(r != null) {
return `${r[1]}: ${r[2]}-${r[3]}-${r[4]}`;
}
}
var possibles = ["y1e1", "y:1e1", "Y: 1r3", "y: 32e4", "1:e3e"];
possibles.forEach(function(posssiblity) {
console.log(`input(${posssiblity}), result(${validateInventoryCode(posssiblity)})`);
})
function validateInventoryCode(input) {
var regexp = /^([a-zA-Z]+)(?:\:\s*)?(\d+)-?(\w+)-?(\d+)$/
var r = regexp.exec(input);
if (r != null) {
return `${r[1]}: ${r[2]}-${r[3]}-${r[4]}`;
}
}
&#13;
答案 2 :(得分:0)
这是匹配和替换模式的功能: DEMO
function findAndFormat(text){
var splittedText=text.split(' ');
for(var i=0, textLength=splittedText.length; i<textLength; i++){
var analyzed=splittedText[i].match(/[A-z]{1}\d{1}[A-z]{1}\d{1}$/);
if(analyzed){
var formattedString=analyzed[0][0].toUpperCase()+': '+analyzed[0][1]+'-'+analyzed[0][2].toUpperCase()+'-'+analyzed[0][3];
text=text.replace(splittedText[i],formattedString);
}
}
return text;
}
答案 3 :(得分:-1)
我认为它就像它的内容一样: y1e4
字母,数字,字母,数字:
/([A-z][0-9][A-z][0-9])/g
是的,在这种情况下可以使用正则表达式,例如表单验证和类似的东西。只是在某些情况下滥用正则表达式会导致性能不佳(进入密集数据处理等)
实施例
"HelloY1E4world".replace(/([A-z][0-9][A-z][0-9])/g, ' ');
应该返回:“Hello world”
regxr.com总是派上用场