所以我需要分割一个正则表达式,来自我的数据库。值如下所示
regexValue = '/^([0-9]{3}.?[0-9]{3}.?[0-9]{3}-?[0-9]{2}|[0-9]{2}.?[0-9]{3}.?[0-9]{3}/?[0-9]{4}-?[0-9]{2})$/ig'
如果您仔细分析这个正则表达式,您可以看到它在正则表达式之间有一个正斜杠'/'。如果我想分割它,使用
values.split('/');
它将生成比我想要的更多的字符串。例如一个简单的正则表达式
//would generate three values("", w+ , ig)
regexValue = '/w+/ig'
regexValue.split('/');
是否有一种方法,所以我只能分割得到第一个和最后一个值?
如果您想将该字符串拆分为正则表达式主体和它的标志,您可以轻松地使用…正则表达式。😃
const parts = /^s*/(.*)/(?:([a-z]*))s*$/.exec(regexString);
// A ^
// B ^^^
// C ^^
// D ^^^^
// E ^^
// F ^^^^^^^^^^^^
// G ^^^
// H ^
- A: Start of input
- B:可选空白
- C:正则表达式"literal">
- D:表达式体
- E:正则表达式"literal"结束斜杠
- F:可选标志
- G:可选空白
- H:输入结束
生活例子:
const regexString = '/^([0-9]{3}\.?[0-9]{3}\.?[0-9]{3}\-?[0-9]{2}|[0-9]{2}\.?[0-9]{3}\.?[0-9]{3}\/?[0-9]{4}\-?[0-9]{2})$/ig';
const parts = /^s*/(.*)/(?:([a-z]*))s*$/.exec(regexString);
if (!parts) {
console.log("No match");
} else {
const [, body, flags] = parts;
console.log(`body: ${body}`);
console.log(`flags: ${flags}`);
}
请注意,我转义了字符串字面量中的反斜杠,因为您说您正在从数据库中读取此内容,因此您在代码中的字符串字面量中没有它。只是在字符串文本中,反斜杠是一个转义字符,所以.
和.
的意思完全相同。要编写一个字符串字面值来定义一个带有反斜杠的字符串,您必须像我在上面的代码片段中所做的那样转义它们。再一次,你说它来自你的数据库,所以你很好,但我认为我应该在示例中逃避它们,以避免误导。