这个特定字符串的JS RegExp是什么?

时间:2016-09-15 04:55:04

标签: javascript regex

我在库存管理程序中有一个相当孤立的情况,我们的货架位置具有特定格式,始终为Letter: Number-Letter-Number,例如Y:1-E-4。我们大多数同事只需输入" y1e4"并且完成了它,但这显然会在数据库中产生不一致格式的问题。 JS RegExp是自动检测和格式化这些字母数字字符串的理想方式吗?我慢慢地围绕着JavaScript的Perl语法,但是这是一个简单的格式化其中一个字符串的例子吗?

4 个答案:

答案 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;
&#13;
$
&#13;
&#13;
&#13;

- 如果字母必须转为大写字母:

&#13;
&#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;
&#13;
&#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]}`;
   }
}

&#13;
&#13;
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;
&#13;
&#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总是派上用场