我需要一些带字符串的东西,然后把它分成一个数组.我希望在每个空间之后拆分它,这样 -
"大家好!" 变成---> [" 你好 "," 每个人! "]
但是,我希望它忽略撇号之间的空格.所以举例 -
"你今天好吗?" 变成---> [" 如何 ","你是你"," 今天? "]
现在我写了下面的代码(有效),但有些东西告诉我,我所做的非常可怕,可以用大约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;
}
Run Code Online (Sandbox Code Playgroud)
如果有人能够以更正确和有效的方式(也许更"JS"的方式)教我如何重写,我将深深感激.
谢谢!
编辑 -
好吧,我刚刚发现了一些问题,其中一些是我修复的,有些我不知道怎么处理而不使这个代码太复杂(例如字符串"hello'every body'!"不能正确分割.. ..)
您可以尝试匹配而不是拆分:
string.match(/(?:['"].+?['"])|\S+/g)
Run Code Online (Sandbox Code Playgroud)
上面的正则表达式将匹配引号之间的任何内容(包括引号),或者任何不是空格的内容。
如果您还想匹配引号后的字符,?请!尝试:
/(?:['"].+?['"]\W?)|\S+/g
Run Code Online (Sandbox Code Playgroud)
因为"hello 'every body'!"它会给你这个数组:
["hello", "'every body'!"]
Run Code Online (Sandbox Code Playgroud)
请注意,\W也匹配空格,如果您想匹配标点符号,您可以通过使用字符类代替\W
[,.?!]
Run Code Online (Sandbox Code Playgroud)
或者简单地在匹配后修剪字符串:
string.match(regex).map(function(x){return x.trim()})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |