正则表达式从第二个符号开始提取数字

时间:2018-03-11 14:42:32

标签: javascript regex

对于大量的正则表达式问题,我们感到非常抱歉,但我无法找到与我的需求相似的内容。我想输出可以包含数字或字母的字符串' A'作为第一个符号和数字只在其他位置。输入是任何字符串,例如:

---INPUT---    -OUTPUT-
A123asdf456 -> A123456
0qw#$56-398 -> 056398
B12376B6f90 -> 12376690
12A12345BCt -> 1212345

我尝试的是replace(/[^A\d]/g, '')(我使用JS),除了在字符串中间有A的情况之外,它几乎完成了这项工作。我尝试使用^锚点,但该模式与字符串中的其他数字不匹配。不确定什么更容易 - 提取匹配字符或删除不匹配。

3 个答案:

答案 0 :(得分:4)

我认为你可以这样做,使用负向前瞻,然后用空字符串替换。

在非捕获组(?:中,使用否定外观(?!来声明后面的内容不是字符串的开头,后跟^A或数字\d 。如果是这种情况,请匹配任何字符.

(?:(?!^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;
&#13;
&#13;

答案 1 :(得分:1)

您可以在交替的两个不同侧面匹配和捕获所需和不需要的字符,然后将那些不需要的字符替换为空白字符:

^(A)|\D

JS代码:

&#13;
&#13;
var inputStrings = [
    "A-123asdf456",
    "A123asdf456",
    "0qw#$56-398",
    "B12376B6f90",
    "12A12345BCt"
];
console.log(
    inputStrings.map(v => v.replace(/^(A)|\D/g, "$1"))
);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可以使用以下正则表达式:/(^A)?\d+/g

&#13;
&#13;
var arr = ['A123asdf456','0qw#$56-398','B12376B6f90','12A12345BCt', 'A-123asdf456'],
    result = arr.map(s => s.match(/(^A|\d)/g).join(''));
console.log(result);
&#13;
&#13;
&#13;