JavaScript正则表达式在字符串后获取数字

JavaScript regex get number after string

本文关键字:获取 数字 字符串 正则表达式 JavaScript      更新时间:2023-09-26

在令人震惊地意识到JavaScript中的正则表达式与PCE中的正则表达式有些不同之后,我陷入了以下困境。

在 php 中,我在 x 之后提取一个数字:

(?x)[0-9]+

在 JavaScript 中,由于捕获括号差异导致的组无效,相同的正则表达式不起作用。

所以我正在尝试实现相同的微不足道的功能,但我不断得到 x 和数字:

(?:x)([0-9]+)

如何在不包含 x 的情况下捕获 x 之后的数字?

这也有效:

/(?:x)([0-9]+)/.test('YOUR_STRING');

然后,所需的值为:

RegExp.$1 // group 1

您可以尝试以下正则表达式: (?!x)[0-9]+

在这里摆弄:https://jsfiddle.net/xy6x938e/1/

这是假设您现在正在寻找一个 x 后跟一个数字,它使用捕获组来捕获数字部分。

var myString = "x12345";
var myRegexp = /x([0-9]+)/g;
var match = myRegexp.exec(myString);
var myString2 = "z12345";
var match2 = myRegexp.exec(myString2);
if(match != null && match.length > 1){
    alert('match1:' + match[1]);
}
else{
    alert('no match 1');
}
if(match2 != null && match2.length > 1){
    alert('match2:' + match2[1]);
}
else{
    alert('no match 2');
}

(''d+) 试试这个!我已经使用 x12345 在此工具上进行了测试http://www.regular-expressions.info/javascriptexample.html

如何在不包含 x 的情况下捕获 x 之后的数字?

实际上,您只想在固定字符串/已知模式之后提取数字序列。

您的 PCRE (PHP) 正则表达式,(?x)[0-9]+错误的(?x),因为它是PCRE_EXTENDED VERBOSE/COMMENTS 标志的内联版本(请参阅"模式修饰符")。在这种情况下,它不会做任何有意义的事情,(?x)[0-9]+等于 [0-9]+'d+ .

您可以使用

console.log("x15 x25".match(/(?<=x)'d+/g));

您还可以使用捕获组,然后在获得匹配项后提取组 1 值:

const match = /x('d+)/.exec("x15");
if (match) {
  console.log(match[1]); // Getting the first match
}
// All matches
const matches = Array.from("x15,x25".matchAll(/x('d+)/g), x=>x[1]);
console.log(matches);

您仍然可以使用独占模式(?!...)

因此,对于您的示例,它将是 /(?!x)[0-9]+/ .尝试以下操作:

/(?!x)'d+/.exec('x123')
// => ["123"]