【发布时间】:2016-07-28 22:27:03
【问题描述】:
我看到有关于 SO 的类似问题,但我没有找到符合我特定目标的问题。
我开发了一个小函数,它通过一个字符串(比如说 10 到 160 个字符)循环提取
- 通配符(例如 $1、$2、...) - 称为“特价商品”
- 它们之间的字符串
要解析的字符串示例:“word1 word2 $1 word3 $2 word4 $3”。
输出示例:
{
strings: [word1 word2, word3, word4],
specialChars: 3
}
当然也有限制情况(没有通配符,只有1个通配符,通配符可以在字符串的开头或结尾)。
到目前为止我写的算法如下(在这个问题中,有一些问题需要修复,但我对效率比结果更感兴趣):
function parsestr(str: string) {
let specialChars = [],
plaintextParts = [],
resultObject = {
strings: [],
specialChars: 0
};
// convert to char array and loop
str.split('').forEach(function(c, i){
if (c=='$') specialChars.push(i);
});
resultObject.specialChars = specialChars.length;
// extract plain text parts
if (specialChars.length == 0) return resultObject;
// part before first wildcard
if (specialChars[0]>0) plaintextParts.push(str.substr(0, specialChars[0]-1));
// 2..N
for (var i=1; i<specialChars.length-1; i++) {
plaintextParts.push(str.substr(specialChars[i-1]+2, specialChars[i]-1));
}
// last part
if (specialChars[specialChars.length-1]+1 < str.length-1)
plaintextParts.push(str.substr(specialChars[specialChars.length-2]+2, specialChars[specialChars.length-1]-1));
resultObject.strings = plaintextParts;
return resultObject;
}
// call function and print output
var jsonString = "word1 word2 $1 word3 $2 word4 $3";
console.log(JSON.stringify(parseJsonString(jsonString)));
【问题讨论】:
-
我相信这已经可以通过 JS O_o 中的内置正则表达式完成
-
是的。 @MatíasFidemraizer 这正是如何做到的 ;-)
标签: javascript string performance typescript