javascript 在Js中使用正则表达式查找拆分字符串

gcuhipw9  于 2023-02-21  发布在  Java
关注(0)|答案(1)|浏览(109)

我遇到了一个棘手的问题。我需要在.处拆分以下字符串,后跟一个单词:
".use(z.string().min(2).max(4)).array(.length())"
但问题是,我只需要拆分.use(...).array(...),大括号之间的内容应该保持不变。
目前,我使用正向前瞻匹配后跟一个单词的.
/(?=\.[\w]+)/
但显然这也会把大括号里的字符串分开。
我考虑过建立一个lookaround模式来检查匹配是否在大括号内,但是我的正则表达式知识不是很好,所以我真的不知道从哪里/如何开始。
我很感激任何正确方向的提示。

tv6aics1

tv6aics11#

跟踪您在嵌套括号中的深度,以便您可以仅在不在嵌套括号中时才决定何时拆分。

const s = ".use(z.string().min(2).max(4)).array(.length())";

let splitIndices = [0];
let depth = 0;
[...s].forEach((c,i) => {
  if(!depth && !c.match(/\w/)) {
    let p = s.substring(0, i-1).match(/\.\w+$/)?.index;
    if(p) splitIndices.push(p);
  }
  if(c==='(') depth++;
  if(c===')') depth--;
})
console.log(splitIndices.map((e,i,a)=>s.substring(e, a[i+1])))

相关问题