calculate-items
Version:
Items calculation template
45 lines (36 loc) • 1.42 kB
text/typescript
import {VALUE_SPLITTER} from "../constants/patterns";
import {compact, map, split, trim} from "lodash";
export const splitLineText = (lineText: string): Array<string> => {
if (!lineText || lineText.length < 2) {
return []
}
const separatorIndexes = getIndexesOfCharInText(lineText, '-')
if (separatorIndexes.length > 0) {
let sepIndex = separatorIndexes.pop()!
let decIndex = sepIndex
while (separatorIndexes.length > 0) {
decIndex = decIndex - 1
console.log('sepIndex = ', decIndex, separatorIndexes, lineText, lineText[decIndex], isNumberOrOperator(lineText[decIndex]))
if (!isNumberOrOperator(lineText[decIndex])) {
break
} else if (decIndex === separatorIndexes[separatorIndexes.length - 1]) {
sepIndex = separatorIndexes.pop()!
}
}
return compact([trim(lineText.slice(0, sepIndex)), trim(lineText.slice(sepIndex + 1))])
}
return compact(map(split(lineText, VALUE_SPLITTER), trim))
}
function isNumberOrOperator(char: string) {
const numberRegex = /^[0-9]$/;
const operatorRegex = /^[+\-*/()\s]$/;
return numberRegex.test(char) || operatorRegex.test(char);
}
function getIndexesOfCharInText(text: string, char: string) {
return Array.from(text).reduce((result, ch, index) => {
if (ch === char) {
result.push(index)
}
return result
}, [] as number[])
}