gpt4 book ai didi

javascript - 将字符串拆分为数组,同时忽略撇号之间的内容

转载 作者:数据小太阳 更新时间:2023-10-29 05:29:49 24 4
gpt4 key购买 nike

我需要一些东西,它接受一个字符串,并将它分成一个数组。我想在每个空格之后拆分它,这样 -

“大家好!” 变成 ---> [“大家好”,“大家好!”]

但是,我希望它忽略撇号之间的空格。例如 -

“你今天好吗?” 变成 ---> ["", "你好吗", "今天?"]

现在我编写了以下代码(有效),但有些东西告诉我我所做的非常糟糕,而且它可以用大约 50% 的代码来完成。我对 JS 也很陌生,所以我想我仍然不遵守该语言的所有习语。

function getFixedArray(text) {

var textArray = text.split(' '); //Create an array from the string, splitting by spaces.

var finalArray = [];
var bFoundLeadingApostrophe = false;
var bFoundTrailingApostrophe = false;
var leadingRegExp = /^'/;
var trailingRegExp = /'$/;
var concatenatedString = "";

for (var i = 0; i < textArray.length; i++) {
var text = textArray[i];

//Found a leading apostrophe
if(leadingRegExp.test(text) && !bFoundLeadingApostrophe && !trailingRegExp.test(text)) {
concatenatedString =concatenatedString + text;
bFoundLeadingApostrophe = true;
}

//Found the trailing apostrophe
else if(trailingRegExp.test(text ) && !bFoundTrailingApostrophe) {

concatenatedString = concatenatedString + ' ' + text;
finalArray.push(concatenatedString);

concatenatedString = "";

bFoundLeadingApostrophe = false;
bFoundTrailingApostrophe = false;
}

//Found no trailing apostrophe even though the leading flag indicates true, so we want this string.
else if (bFoundLeadingApostrophe && !bFoundTrailingApostrophe) {
concatenatedString = concatenatedString + ' ' + text;
}

//Regular text
else {
finalArray.push(text);
}

}

return finalArray;

}

如果有人可以通过这个并教我如何以更正确和有效的方式(也许是更“JS”的方式)重写它,我将非常感激。

谢谢!

编辑 -

好吧,我刚刚发现了一些问题,我修复了其中一些问题,还有一些我不确定如何处理而不会使这段代码过于复杂(例如字符串 "hello 'every body'!" 分割不当....)

最佳答案

您可以尝试匹配而不是拆分:

string.match(/(?:['"].+?['"])|\S+/g)

上面的正则表达式将匹配引号之间的任何内容(包括引号)或任何不是空格的内容。

如果你还想匹配引号后的字符,比如 ?! 你可以试试:

/(?:['"].+?['"]\W?)|\S+/g

对于 "hello 'every body'!" 它将给你这个数组:

["hello", "'every body'!"]

请注意 \W 也匹配空格,如果你想匹配标点符号,你可以使用字符类代替 \W

[,.?!]

或者简单地在匹配后 trim 字符串:

string.match(regex).map(function(x){return x.trim()})

关于javascript - 将字符串拆分为数组,同时忽略撇号之间的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25232813/

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