如何将正则表达式转换为所有可能的情况?

时间:2019-06-06 06:02:41

标签: javascript node.js

将正则表达式转换为所有可能的情况

例如:

1.9856 [1-4],则应返回类似98561,98562,98563,98564的值

2.98 [4-5] 65,则应返回值98465,98565

2 个答案:

答案 0 :(得分:0)

您可以使用正则表达式/\[(\d)-(\d)\]/match获得范围的startend。然后使用for循环replace,将匹配的数字从startend

function getCombinations(str) {
  const regex = /\[(\d)-(\d)\]/,
        [match, start, end] = str.match(regex),
        output = []

  for (let i = +start; i <= +end; i++)
    output.push(str.replace(match, i))
  
  return output
}

console.log(getCombinations('1.9856[1-4]'))
console.log(getCombinations('2.98[4-5]65'))

这仅适用于输入字符串中的单个范围。对于多个范围,您可以使用exec获取多个匹配项,并根据匹配的replace使用index

答案 1 :(得分:0)

您可以使用正则表达式来匹配精确数字,也可以使用\d来匹配任何数字。

对于您的第一个示例,其中9856 [1-4]则应返回值98561,98562,98563,98564, 您可以返回以9856开头并以1-4范围内的任何数字结尾的字符串中的所有数字,如下所示:

let nums = "985612, 985622, 985633, 985644, 985655"

let regex = /9856[1-4]/g

let result = nums.match(regex)

console.log(result)

对于第二个示例98 [4-5] 65,则它应返回值98465、98565

let nums = "98465, 98565"

let regex = /98[4-5]{2}65/g

let result = nums.match(regex)

console.log(result)