为什么使用RegEx /(?〈=])、(?=(L|男|J型|V))/gi用JS拆分方法给予我这个结果?

3npbholx  于 2023-03-20  发布在  其他
关注(0)|答案(2)|浏览(160)

标题解释了我的问题。我不明白为什么在字符串上使用RegEx /(?<=]),(L|M|J|V)/gi和JS split()方法会得到意外的结果。
使用所述RegEx导致:

[
'Lunes[9:00-13:00,14:00-16:00]',
  'M',
  'Martes[19:00-3:00]',
  'M',
  'Miercoles[19:00-21:00,0:00-3:30]',
  'J',
  'Jueves[6:00-8:00,8:30-10:30,16:00-20:05]' 
]

而不是:

[
  'Lunes[9:00-13:00,14:00-16:00]',
  'Martes[19:00-3:00]',
  'Miercoles[19:00-21:00,0:00-3:30]',
  'Jueves[6:00-8:00,8:30-10:30,16:00-20:05]' 
]

我的代码:

const pattern = /(?<=]),(?=(l|m|j|v))/gi;
    const myString = "Lunes[9:00-13:00,14:00-16:00],Martes[19:00-3:00],Miercoles[19:00-21:00,0:00-3:30],Jueves[6:00-8:00,8:30-10:30,16:00-20:05]";
    const myArray = myString.split(pattern);
    console.log(myArray);
cvxl0en2

cvxl0en21#

这是由于lookahead中的捕获组,您可以忽略它,并使用字符类代替交替[lmjv]

const pattern = /(?<=]),(?=[lmjv])/gi;
const myString = "Lunes[9:00-13:00,14:00-16:00],Martes[19:00-3:00],Miercoles[19:00-21:00,0:00-3:30],Jueves[6:00-8:00,8:30-10:30,16:00-20:05]";
const myArray = myString.split(pattern);
console.log(myArray);
v64noz0r

v64noz0r2#

您的确切问题可能是lookbehinds不受支持。我建议使用regex find all方法:

var myString = "Lunes[9:00-13:00,14:00-16:00],Martes[19:00-3:00],Miercoles[19:00-21:00,0:00-3:30],Jueves[6:00-8:00,8:30-10:30,16:00-20:05]";
var matches = myString.match(/\b[LMJVSD][a-z]+\[.*?\]/g);
console.log(matches);

正则表达式字符类\b[LMJVSD][a-z]+涵盖了从Lunes到Domingo(星期一到星期日)。

相关问题