用正则表达式匹配用户输入的输入,并修剪无效输入以匹配正则表达式

时间:2019-01-24 11:45:47

标签: javascript regex

我有一个正则表达式:/^PVER : [a-z|A-Z|0-9|_]* [/] [a-z|A-Z|0-9|_]* ; 0$/

例如,假设"PVER : abc / def ; 0"是有效输入。

如果输入的输入是:" PVER : abc //// def ; 0"
如何像第一个示例一样转换此输入使其有效?

2 个答案:

答案 0 :(得分:0)

使用此正则表达式查找多个连续出现的/并将其替换为一个/

const res = " PVER : abc //// def ; 0".replace(/(\/)\1+/g, "/");

console.log(res);

或者您可以修改原始正则表达式,使其也匹配连续出现的/

const res = "PVER : abc //// def ; 0".match(/^PVER : [a-z|A-Z|0-9|_]* [/]+ [a-z|A-Z|0-9|_]* ; 0$/g);

console.log(res);

答案 1 :(得分:0)

要将第二个字符串转换为第一个字符串,可以将多个2个或多个空格字符或正斜杠替换为一个。然后修剪字符串以删除前导空格。

let str = " PVER     :  abc  //// def   ; 0";
let res = str.trim()
    .replace(/\s{2,}/g, ' ')
    .replace(/\/{2,}/, '/');
console.log(res);

您可以更新正则表达式,而不是更改输入。模式[a-z|A-Z|0-9|_]是一个字符类,它将与列出的众多字符之一匹配。如果不想匹配管道|,则可以将其写为\w

在第二个示例中,您必须将一个或多个空格(或制表符)匹配,您可能会使用[ \t],或使用\s来匹配空白字符一次或多次。要匹配的正斜杠。

使用quantifiers,您可以将正则表达式更新为:

^\s*PVER\s*:\s*\w+\s+\/+\s*\w+\s+;\s+0$

Regex demo

[
  "PVER : abc / def ; 0",
  " PVER     :  abc  //// def   ; 0",
  "test"
].forEach(s => {
  console.log(s + " =>> " + /^\s*PVER\s*:\s*\w+\s+\/+\s*\w+\s+;\s+0$/.test(s));
});