对于大量的正则表达式问题,我们感到非常抱歉,但我无法找到与我的需求相似的内容。我想输出可以包含数字或字母的字符串' A'作为第一个符号和数字只在其他位置。输入是任何字符串,例如:
---INPUT--- -OUTPUT-
A123asdf456 -> A123456
0qw#$56-398 -> 056398
B12376B6f90 -> 12376690
12A12345BCt -> 1212345
我尝试的是replace(/[^A\d]/g, '')
(我使用JS),除了在字符串中间有A
的情况之外,它几乎完成了这项工作。我尝试使用^
锚点,但该模式与字符串中的其他数字不匹配。不确定什么更容易 - 提取匹配字符或删除不匹配。
答案 0 :(得分:4)
我认为你可以这样做,使用负向前瞻,然后用空字符串替换。
在非捕获组(?:
中,使用否定外观(?!
来声明后面的内容不是字符串的开头,后跟^A
或数字\d
。如果是这种情况,请匹配任何字符.
var pattern = /(?:(?!^A|\d).)+/g;
var strings = [
"A123asdf456",
"0qw#$56-398",
"B12376B6f90",
"12A12345BCt"
];
for (var i = 0; i < strings.length; i++) {
console.log(strings[i] + " ==> " + strings[i].replace(pattern, ""));
}
&#13;
答案 1 :(得分:1)
您可以在交替的两个不同侧面匹配和捕获所需和不需要的字符,然后将那些不需要的字符替换为空白字符:
^(A)|\D
JS代码:
var inputStrings = [
"A-123asdf456",
"A123asdf456",
"0qw#$56-398",
"B12376B6f90",
"12A12345BCt"
];
console.log(
inputStrings.map(v => v.replace(/^(A)|\D/g, "$1"))
);
&#13;
答案 2 :(得分:0)
您可以使用以下正则表达式:/(^A)?\d+/g
var arr = ['A123asdf456','0qw#$56-398','B12376B6f90','12A12345BCt', 'A-123asdf456'],
result = arr.map(s => s.match(/(^A|\d)/g).join(''));
console.log(result);
&#13;