Javascript 正在寻找返回字符串的一部分的有效方法

Javascript 正在寻找返回字符串的一部分的有效方法,javascript,regex,string,typescript,Javascript,Regex,String,Typescript,我正在使用JavaScript/TypeScript 我有一个字符串,其中可能包含一些表示重要性或紧迫性的标记。例如: A:“提醒我明天去商店,这真的很重要” B:“明天去商店很重要。” 我已经建立了一种方法来识别重要短语在主短语中的位置。例如,对于字符串A,重要性短语位于字符40和62之间。在短语B中,它介于字符0和16之间 我有一个JSON对象,它描述了重要短语的开始/停止点: this.importancePosition={start:40,stop:62} 没问题 我还有其他短语元素检

我正在使用JavaScript/TypeScript

我有一个字符串,其中可能包含一些表示重要性或紧迫性的标记。例如:

A:“提醒我明天去商店,这真的很重要”

B:“明天去商店很重要。”

我已经建立了一种方法来识别重要短语在主短语中的位置。例如,对于字符串A,重要性短语位于字符40和62之间。在短语B中,它介于字符0和16之间

我有一个JSON对象,它描述了重要短语的开始/停止点:

this.importancePosition={start:40,stop:62}

没问题

我还有其他短语元素检测器:

this.urgencyPosition={start:20,stop:30}

this.locationPosition={start:-1,stop:-1}

等等

顺便说一下,我使用-1作为未找到令牌的指示符。此外,子短语可能不按顺序排列

那么问题来了:

假设我有主短语和每个检测到的子短语的位置。现在,我想返回主短语中不属于其中一个子短语的所有内容

我有这个:

[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

我想退回这个:


做这件事的有效方法是什么?我考虑过将它们从主字符串中正则化,但这是最干净的方法吗?

假设主短语是字符串,请尝试:

var replacedPhrase = mainPhrase.replace(/\[subphrase\]/g, " ");
我不确定我对JS中的正则表达式有多生疏,但我认为这应该能起作用。

函数getSpliceList(数据类型,位置键列表){
返回positionKeyList.reduce((列表,positionKey)=>{
const{start,stop}=dataType[positionKey]
列表。推送([开始,停止]);
退货清单;
}排序((a,b)=>a[0]-b[0]);
}
函数GetReAssembledStringBySpliceConfig(str、数据类型、positionKeyList){
让分隔符=“”;
返回getSpliceList(数据类型、位置键列表)
.reduceRight((字符列表,拼接项)=>{
characterList.splice(
项目[0],
拼接项目[1]-拼接项目[0]+1,
分隔符
);
if(!分隔符){
分隔符=“”;
}
返回字符表;
},str.split(“”)).join(“”);
}
常量样本项={
福:“福”,
重要位置:{开始:85,停止:95},
酒吧:“酒吧”,
urgencyPosition:{开始:33,停止:43},
巴兹:“巴兹”,
位置位置:{开始:18,停止:28},
};
const sampleText='[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
const expectedResult='[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
console.log(
“(有序)拼接列表…”,
获取拼接列表(
样本项目,
['urgencyPosition'、'importancePosition'、'locationPosition']
)
);
console.log(
“重新组装的字符串…”,
GetReambledStringBySpliceConfig(
样本文本,
样本项目,
['urgencyPosition'、'importancePosition'、'locationPosition']
)
);
console.log(
'重新组装的字符串是否等于预期结果?',
GetReambledStringBySpliceConfig(
样本文本,
样本项目,
['urgencyPosition'、'importancePosition'、'locationPosition']
)==预期结果
);

.as console wrapper{min height:100%!important;top:0;}
如果您有索引,您可以使用这些索引来重建字符串(如果相同的子字符串在原始字符串中多次出现,则regexing也容易出错)。您可能会从查找专注于“查找给定时间表的空闲时间范围”类型问题的算法中获益最大。与“时间”不同,它只是“指数”,但工作原理相同。例如:在我的例子中,我最终使用了regex方法,因为我知道从原始版本中提取的确切措辞,所以regex的可靠性很高。但是通过阅读你提供的链接,我学到了一些东西。谢谢。@user309321。。。关于上述方法有什么问题吗?哇,你做了很多工作。比我想象的要多得多。我真的很喜欢你建议的方法的概括能力。我当前的应用程序不需要同样广泛的应用程序,但我确信将来会在这个解决方案上贴上便条。这是一种深思熟虑的方法。