gpt4 book ai didi

javascript - 负先行正则表达式

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:03:47 28 4
gpt4 key购买 nike

我有这样一个字符串:

<p>Year: ={year}</p>\
<p>Director: ={director}</p>\
<ul>@{actors}<li class="#{class}">={actor}</li>{actors}</ul>\

我想提取所有不在 @{word}...{word} 内的 ={match},所以在这种情况下我想匹配={year}={director} 但不是 ={actor}。到目前为止,这是我得到的结果,但没有用。

/(?!@.*)=\{([^{}]+)\}/g

有什么想法吗?

编辑:我目前的解决方案是在 @{}...{} 中找到所有 ={match} 并替换 = 与类似 =& 的内容。然后我捕获外面的那些,最后我回来并将标记的那些替换回原来的状态。

最佳答案

您可以使用正则表达式将字符串分解为多个段,如下所示:

var s = '<p>Year: ={year}</p> \
<p>Director: ={director}</p> \
<ul>@{actors}<li class="#{class}">={actor}</li>{actors}</ul>',
re = /@\{([^}]+)\}(.*?)\{\1\}/g,
start = 0,
segments = [];

while (match = re.exec(s)) {
if (match.index > start) {
segments.push([start, match.index - start, true]);
}
segments.push([match.index, re.lastIndex - match.index, false]);
start = re.lastIndex;
}

if (start < s.length) {
segments.push([start, s.length - start, true]);
}

console.log(segments);

根据您的示例,您将获得以下分割:

[
[0, 54, true],
[54, 51, false],
[105, 5, true]
]

bool 值指示您是在 true 之外还是在 @{}...{} 段内。它使用反向引用来匹配结尾和开头。

然后,根据段,您可以正常执行替换。

关于javascript - 负先行正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14701879/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com