gpt4 book ai didi

javascript - 如何检查文本是否可以使用正则表达式旋转?

转载 作者:行者123 更新时间:2023-11-30 13:49:46 26 4
gpt4 key购买 nike

我正在尝试 spin text使用正则表达式。我正在努力让它适用于 Googles Apps 脚本。我试过表达式 (\{[^\}]+\}|[^\{\}]*),但在很多情况下都失败了。我只是想让它如果您不明白我所说的旋转文本是什么意思,下面将对其进行解释:

{This|That} 是一只{cat|dog}

这是一只猫这是一只狗那是一只猫那是一只狗

最佳答案

我不会为此使用正则表达式,我只会实现一个状态机。

您只需跟踪自己所处的级别。这是基本的,如果需要可以扩展为递归工作。

另见

/** Can also be written as:
*
* const isValid=s=>s.split('').reduce((r,c)=>c==='{'?r+1:(c==='}'?r-1:r),0)===0;
*/
function isValid(str) {
var state = 0;
for (let i = 0; i < str.length; i++) {
switch (str.charAt(i)) {
case '{': state++; break;
case '}': state--; break;
}
}
return state === 0;
};
.as-console-wrapper { top: 0; max-height: 100% !important; }

更安全的选择

更好的方法是从内到外工作。只需获取左大括号的 LAST 索引,并检查它之后是否有右大括号(和管道),但在下一个大括号之前。

function isValid(str, strict) {
var maxAttempts = 100; // Do not let this loop too many times...
while (str.lastIndexOf('{') < str.indexOf('}', str.lastIndexOf('{'))) {
let start = str.lastIndexOf('{');
let nextStart = str.indexOf('{', start + 1); // Check ahead (optional)
let mid = str.indexOf('|', start); // If you need a pipe check...
let end = str.indexOf('}', start);
//console.log(JSON.stringify({ str : str, start : start, mid : mid, end : end}));
let isValid = start > -1 && end > -1 && (nextStart === -1 || nextStart > end);
if (strict === true && (mid < start || mid > end)) {
return false; // If pipes are required, check for their existence.
}
if (isValid) {
str = str.substring(0, start) + str.substr(end + 1);
}
// Safeguard for accidental infinite recursion...
if (maxAttempts-- < 0) { throw Error('Inifinite recursion detected!'); }
}
return str.indexOf('{') === -1 || str.indexOf('}') === -1;
}

/* Valid */ console.log(isValid('{|}'));
/* Valid */ console.log(isValid('{|}', true));
/* Invalid */ console.log(isValid('{}', true));
/* Invalid */ console.log(isValid('}{'));
/* Invalid */ console.log(isValid('{}}{{}'));
.as-console-wrapper { top: 0; max-height: 100% !important; }

关于javascript - 如何检查文本是否可以使用正则表达式旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58504884/

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