The raw search query, possibly prefixed
The detected mode and the bare value with the prefix removed
parseStructurePrefix("smiles:CCO") // { mode: "smiles", value: "CCO" }
parseStructurePrefix("inchikey:LFQSCWFLJHTTHZ-UHFFFAOYSA-N")
// => { mode: "inchikey", value: "LFQSCWFLJHTTHZ-UHFFFAOYSA-N" }
parseStructurePrefix("ethanol") // { mode: "auto", value: "ethanol" }
export function parseStructurePrefix(query: string): { mode: StructureMode; value: string } {
const match = /^(smiles|inchikey)\s*:\s*(.+)$/i.exec(query.trim());
if (match) {
return { mode: match[1].toLowerCase() as 'smiles' | 'inchikey', value: match[2].trim() };
}
return { mode: 'auto', value: query.trim() };
}
Strips an explicit
smiles:orinchikey:prefix from a query, letting the user force structure resolution for otherwise-ambiguous input (e.g.smiles:COinstead of carbon monoxide).