我需要一些带字符串的东西,然后把它分成一个数组。 我想在每个空格之后拆分它,所以这个 -
"大家好!" 变成了---> [" 您好"," 每个人!"]
但是,我希望它忽略撇号之间的空格。例如 -
"你是怎样的'今天?" 变成了---> [" 如何","''"" 今天?"]
现在我编写了以下代码(有效),但有些东西告诉我,我所做的事情非常糟糕,可以用大约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;
}
如果有人能够通过这个并教会我如何重写这一点,我会非常感激,并且更加正确。有效的方式(也许是更多&#34; JS&#34;方式)。
谢谢!
修改 -
我刚刚发现了一些问题,其中一些是我修复的,有些我不确定如何处理而不会使代码过于复杂(例如字符串&#34; hello&# 39;每个人&#39;!&#34; 没有正确分裂......)
答案 0 :(得分:3)
您可以尝试匹配而不是拆分:
string.match(/(?:['"].+?['"])|\S+/g)
上述正则表达式将匹配引号之间的任何内容(包括引号),或者其他任何不是空格的内容。
如果您还想在引号后匹配字符,例如?
和!
,您可以尝试:
/(?:['"].+?['"]\W?)|\S+/g
对于"hello 'every body'!"
,它会给你这个数组:
["hello", "'every body'!"]
请注意,\W
也匹配空格,如果您想匹配标点符号,则可以使用字符类代替\W
[,.?!]
或者在匹配后简单修剪字符串:
string.match(regex).map(function(x){return x.trim()})