如何使用javascript的split函数拆分值,仅拆分检查第一个和最后一个出现



所以我需要分割一个正则表达式,来自我的数据库。值如下所示

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}`);
}


请注意,我转义了字符串字面量中的反斜杠,因为您说您正在从数据库中读取此内容,因此您在代码中的字符串字面量中没有它。只是在字符串文本中,反斜杠是一个转义字符,所以..的意思完全相同。要编写一个字符串字面值来定义一个带有反斜杠的字符串,您必须像我在上面的代码片段中所做的那样转义它们。再一次,你说它来自你的数据库,所以你很好,但我认为我应该在示例中逃避它们,以避免误导。

最新更新