gpt4 book ai didi

javascript - 在不被引号包围的情况下用空格和句号拆分字符串

转载 作者:行者123 更新时间:2023-11-29 15:25:56 24 4
gpt4 key购买 nike

我知道类似的问题已经被问过很多次,但我的正则表达式知识很差,我无法用它来解决我的问题。所以这就是我想要做的:

我有一段文字,我想把句子分开。每个句子都以一些空格和句号结尾(句号前可以有一个或多个空格,但总是至少有一个)。

一开始我使用的是/\s+\./,它对分隔句子的效果很好,但后来我注意到有这样的情况: “一些文字。一些文字”。

现在,我不想用引号分隔文本。我搜索并找到了很多适用于空格的解决方案(例如:/(".*?"|[^"\s]+)+(?=\s*|\s*$)/),但我无法将它们修改为由空格和句点分隔。

这是我目前正在使用的代码。

var regex = /\s+\./;
var result = regex.exec(fullText);
if(result == null) {
break;
}
var length = result[0].length;
var startingPoint = result.index;
var currentSentence = fullText.substring(0,startingPoint).trim();

fullText = fullText.substring(startingPoint+length);

我把句子一个一个分开,从全文中删除。length 变量表示需要删除的部分的大小,startingPoint 是该部分开始的位置。该代码是更大的 while 循环的一部分。

最佳答案

您可以尝试在定界符之间匹配所有句子,而不是拆分。在这种情况下,跳过引号中的定界符会更容易。相应的正则表达式是:

(.*?(?:".*?".*?)?|.*?)(?: \.|$)

演示:https://regex101.com/r/iS9fN6/1

然后可以在这个循环中检索句子:

while (match = regex.exec(input)) {
console.log(match[1]); // each next sentence is in match[1]
}

但是!这个特殊的表达式使 regex.exec(input) 无限返回 true! (看起来像是另一个 SO 问题的候选人。)

所以我只能建议从表达式中删除 $ 的解决方法。这将导致正则表达式错过最后一部分,稍后可能会提取为与正则表达式不匹配的预告片:

var input = "some text . some text . \"some text . some text\" some text . some text";
//var regex = /(.*?(?:".*?".*?)?|.*?)(?: \.|$)/g;
var regex = /(.*?(?:".*?".*?)?|.*?) \./g;
var trailerPos = 0;
while (match = regex.exec(input)) {
console.log(match[1]); // each next sentence is in match[1]
trailerPos = match.index + match[0].length;
}
if (trailerPos < input.length) {
console.log(input.substring(trailerPos)); // the last sentence in
// input.substring(trailerPos)
}

更新:

如果句子跨越多行,则正则表达式将不起作用,因为 . 模式与换行符不匹配。在这种情况下,只需使用 [\s\S] 而不是 :

var input = "some \ntext . some text . \"some\n text . some text\" some text . so\nm\ne text";
var regex = /([\s\S]*?(?:"[\s\S]*?"[\s\S]*?)?|[\s\S]*?) \./g;
var trailerPos = 0;
var sentences = []
while (match = regex.exec(input)) {
sentences.push(match[1]);
trailerPos = match.index + match[0].length;
}
if (trailerPos < input.length) {
sentences.push(input.substring(trailerPos));
}
sentences.forEach(function(s) {
console.log("Sentence: -->%s<--", s);
});

关于javascript - 在不被引号包围的情况下用空格和句号拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39122641/

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