我需要用逗号、分号或点分隔的数字
输入字符串可以是
1234567812345678
12345678.1234567812345678;12345678
分隔符之前或之后可能有空格
12345678、12345678。12345678;12345678
数字之间可能有空格
1234 5678.12 345678123 45678;12 3456 78
输出应始终为
1234567812345678 12345678
如果我能检查这个数字是否有8位,那就太好了
到目前为止,我有这个正则表达式
[0-9]+(,[0-9]+
Javascript 需要它
感谢的建议
如果您想用可选空格检查8位数字,您可以将8位数字与中间的可选空格进行匹配,并使用正向前瞻在右侧断言逗号、分号或句点。
bd(?: *d){7}(?= *[,;.]|$)
模式匹配:
bd
单词边界,匹配个位数(?: *d){7}
匹配可选空格重复7次,匹配一个数字,共8个(?= *[,;.]|$)
正向前瞻以断言可选空间以及字符串右侧或末尾的,
;
或.
Regex演示
然后,在match生成的数组中,可以删除空格并用空格连接数组。
const regex = /bd(?: *d){7}(?= *[,;.]|$)/g;
const strings = [
"12345678,12345678,12345678",
"12345678.12345678,12345678;12345678",
"12345678 , 12345678 . 12345678 ; 12345678",
"1234 5678 .12 345678, 123 45678 ;12 3456 78"
].forEach(s => {
const res =
s.match(regex)
.map(i => i.replace(/s+/g, ''))
.join(" ");
console.log(res);
})
首先,您需要从中删除空间。类似:
var str = "1234 5678 . 123 45678 , 1 2345678 ; 12 345678"
var patt1 = /s/g; //regex for space
var result = str.replace(patt1 , "");
删除空格后,可以替换逗号、句点和分号。类似:
var patt2 = /[.;:]/g; //regex for replace comma, semicolon, and dot with space
var output = result.replace(patt2," ");