advanced-search-query
Version:
Another parser for advanced search query syntax.
36 lines (33 loc) • 933 B
text/typescript
export function getQuotePairMap(str?: string | null) {
if (!str) str = ''
const quotePairMap: {
single: Record<number, boolean>
double: Record<number, boolean>
} = { single: {}, double: {} }
const prevQuote = { single: -1, double: -1 }
let prevChar = ''
for (let i = 0; i < str.length; i++) {
const char = str[i]
if (prevChar !== '\\') {
if (char === '"') {
if (prevQuote.double >= 0) {
quotePairMap.double[prevQuote.double] = true
quotePairMap.double[i] = true
prevQuote.double = -1
} else {
prevQuote.double = i
}
} else if (char === "'") {
if (prevQuote.single >= 0) {
quotePairMap.single[prevQuote.single] = true
quotePairMap.single[i] = true
prevQuote.single = -1
} else {
prevQuote.single = i
}
}
}
prevChar = char
}
return quotePairMap
}