JavaScript支持复合正则表达式吗?

19 浏览
0 Comments

JavaScript支持复合正则表达式吗?

例如,如果我想匹配 IP 地址,我可以这样拆分:

const octet = /\d{1,3}/;
const ip = /{octet}\.{octet}\.{octet}\.{octet}/;

0
0 Comments

JavaScript支持复合正则表达式吗?

问题的出现原因:用户想要在已经声明的正则表达式文字中使用source属性获取不带封闭标签的版本,并且想要在新的RegExp构造函数内使用模板文字创建新的表达式。然而,在字符串文字中需要转义反斜杠。

解决方法:可以使用已经声明的正则表达式文字的source属性来获取不带封闭标签的版本。然后,在新的RegExp构造函数内使用模板文字创建新的表达式。在字符串文字中需要转义反斜杠。

代码示例:

const octet = /\d{1,3}/;
const octetSource = octet.source;
const ip = new RegExp(`^${octetSource}\\.${octetSource}\\.${octetSource}\\.${octetSource}$`);

以上是一个解决该问题的示例代码。在这个示例中,首先声明了一个正则表达式文字octet,然后使用source属性获取其不带封闭标签的版本,并将其赋值给octetSource变量。接下来,在新的RegExp构造函数中使用模板文字创建了一个新的表达式ip,并在字符串文字中转义了反斜杠。

通过使用正则表达式文字的source属性和模板文字,我们可以在JavaScript中支持复合正则表达式。这种方法可以帮助我们更方便地创建和使用正则表达式。

0
0 Comments

JavaScript支持复合正则表达式吗?

这个问题的出现是因为原始的回答已经足够满足要求,但提问者想知道是否可以不使用模板字面量来解决这个问题。

为了回答这个问题,可以使用new RegExp()和模板字面量的混合方法来实现。下面是一个例子。

const octet = /\d{1,3}/;
const octetS = octet.source;
const ip = new RegExp(
  `^${octetS}\\.${octetS}\\.${octetS}\\.${octetS}$`);
const ips = [
  '127.0.0.1',
  '10.0.2',
  '12.10.2.5',
  '12'];
  
for (const checkip of ips)
  console.log(`IP: ${checkip} = ${ip.test(checkip)}`);

需要注意的是,这并不让octet成为一个正则表达式,而是实际上让它成为一个基本字符串。Sven的解决方案利用了JavaScript正则表达式的source属性,这可能是更好的方法。

JavaScript中可以使用new RegExp()和模板字面量的混合方法来支持复合正则表达式。使用模板字面量可以更方便地处理字符串拼接问题,但如果想要避免使用模板字面量,也可以通过使用source属性来实现。

0