UNPKG

calculate-items

Version:

Items calculation template

45 lines (36 loc) 1.42 kB
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[]) }