JavaScript中如何用split仅按首尾出现的/分割正则值字符串
正则字符串分割解决方案
方法1:正则匹配提取(推荐)
利用正则的贪婪匹配特性自动定位首尾斜杠,可完整获取中间所有内容(包含内部斜杠):
const 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'; // 匹配规则:匹配开头斜杠 + 中间所有内容 + 结尾斜杠 + 修饰符 const res = regexValue.match(/^\/(.*)\/([a-z]*)$/); if (res) { // 正则主体内容,内部的/也不会被截断 const pattern = res[1]; // 正则修饰符 const flags = res[2]; }
其中.*是贪婪匹配,会尽可能多匹配字符,直到遇到最后一个/才停止,所以中间所有内部的/都会被完整保留在分组内。
方法2:索引切片(兼容性更好)
手动定位第一个和最后一个/的位置,直接切片取值,逻辑更直观:
const 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'; // 找第一个/的位置 const first = regexValue.indexOf('/'); // 找最后一个/的位置 const last = regexValue.lastIndexOf('/'); const pattern = regexValue.slice(first + 1, last); const flags = regexValue.slice(last + 1);
两种方案都能完美解决内部包含/的正则字符串拆分问题,不会出现split拆分过多的情况。
内容的提问来源于stack exchange,提问作者Júlio Cesar
相关产品推荐
相关产品推荐

