如何在JavaScript中从“文字符号”字符串创建一个正则表达式?

17 浏览
0 Comments

如何在JavaScript中从“文字符号”字符串创建一个正则表达式?

我想创建一个输入框,用户可以在其中使用文字符号写一个自定义的正则表达式。然后,我想将该文字符号字符串转换为一个正则表达式对象。\n类似于以下代码:\n

const literalNotationStr = `/literal/i`;
const regex = makeRegexFromLiteralNotationString(literalNotationStr)
function makeRegexFromLiteralNotationString(str: string): RegExp {
  // ... 魔法代码 ...
}

\n这里有一个我可能不知道的函数吗?还是说这是需要自己解析和构建的一种情况?

0
0 Comments

正文:

在JavaScript中,通过“文字表示法(literal notation)”创建正则表达式时,需要将标志(flag)作为第二个参数提供。可以使用split方法将文字表示法字符串拆分为正则表达式主体和标志,然后在正则表达式构造函数中使用它。

下面是一个示例代码:

const literalNotationStr = '/literal/i';
const createRegex = (str) => {
   const [, literal, flag] = str.split('/');
   return new RegExp(literal, flag);
};
console.log(createRegex(literalNotationStr));

然而,使用split方法在这种情况下并不可靠,因为用于拆分的字符可能会在正则表达式本身中使用。

为了解决这个问题,可以使用其他方法来提取正则表达式主体和标志。以下是一个解决方法的示例代码:

const literalNotationStr = '/literal/i';
const createRegex = (str) => {
   const body = str.slice(1, str.lastIndexOf('/'));
   const flag = str.slice(str.lastIndexOf('/') + 1);
   return new RegExp(body, flag);
};
console.log(createRegex(literalNotationStr));

通过使用slice方法,我们可以提取出正则表达式的主体和标志,并将它们作为参数传递给RegExp构造函数来创建正则表达式对象。这样可以避免split方法在拆分时出现问题。

使用这种方法,我们可以从“文字表示法”字符串中创建正则表达式,并正确地指定标志。这样,我们就能够解决在JavaScript中如何从“文字表示法”字符串创建正则表达式的问题。

0
0 Comments

问题的出现原因是想要将一个以“字面量表示法”字符串的形式给定的正则表达式转换成RegExp对象。然而,直接将这个字符串作为参数传递给RegExp构造函数是不起作用的,因为构造函数期望的是一个正则表达式字面量或者两个字符串参数(一个是模式,一个是标志)。

为了解决这个问题,我们需要从给定的字符串中提取出模式和标志,然后使用这些信息来创建一个RegExp对象。具体的解决方法如下:

首先,我们需要提取出标志和模式。通过使用match方法,我们可以通过正则表达式`/^\/(.+)\/(\w*)$/`来匹配给定字符串的模式和标志。这个正则表达式的含义是匹配以斜杠开头和结尾的字符串,并将其中的模式和标志提取出来。通过将返回的数组解构赋值给[patternContent, flags],我们就可以分别得到模式和标志。

接下来,我们使用提取出的模式和标志来创建一个RegExp对象。通过调用RegExp构造函数并传入模式和标志作为参数,我们可以得到一个新的RegExp对象。

最后,我们可以使用新创建的RegExp对象来执行正则表达式的操作,比如测试一个字符串是否匹配。

需要注意的是,如果输入的字符串中包含反斜杠,则需要确保这些反斜杠被正确地转义。这可以通过使用String.raw模板字符串来实现,以确保反斜杠不被解释为转义字符。

0