我有一个正则表达式:/^PVER : [a-z|A-Z|0-9|_]* [/] [a-z|A-Z|0-9|_]* ; 0$/
例如,假设"PVER : abc / def ; 0"
是有效输入。
如果输入的输入是:" PVER : abc //// def ; 0"
如何像第一个示例一样转换此输入使其有效?
答案 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$
[
"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));
});