All files split-sentences.ts

100% Statements 4/4
100% Branches 2/2
100% Functions 1/1
100% Lines 4/4

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48        1x                                                                               1x 20x 20x  
/**
 * Regular expression to split text into sentences based on common sentence-ending punctuation.
 * @internal
 */
const splitter = /(.*?(?:[.!?‼‽⁇⁈⁉:…]|\.\.\.)["'”’]?)(?:[\s\r\n]+|$)/gu;
 
/**
 * Splits the input string into an array of sentences.
 *
 * End of sentences are found by looking for the following characters followed by
 * an optional closing quotation mark and terminated by white space or a end of line:
 *
 * | Character | Description                |
 * | --------- | -------------------------- |
 * | ?         | Question mark              |
 * | :         | Colon                      |
 * | [         | Opening square bracket     |
 * | .         | Period                     |
 * | !         | Exclamation mark           |
 * | ?         | Question mark              |
 * | ‼         | Double exclamation mark    |
 * | ‽         | Interrobang                |
 * | ⁇         | Double question mark       |
 * | ⁈         | Question exclamation mark  |
 * | ⁉         | Exclamation question mark  |
 * | :         | Colon                      |
 * | …         | Ellipsis                   |
 * | ...       | Triple period              |
 *
 * | Character | Description                |
 * | --------- | -------------------------- |
 * | "         | Double quotation mark      |
 * | '         | Single quotation mark      |
 * | ”         | Right double quotation mark|
 * | ’         | Right single quotation mark|
 * @param input - The string to be split into sentences.
 * @returns An array of non-empty, trimmed sentences.
 * @example
 * ```ts
 * splitSentences("Hello! How are you? I'm 'OK.'"); // ["Hello!", "How are you?", "I'm 'OK.'"]
 * ```
 * @group String
 * @category Deconstruction
 */
export function splitSentences(input: string): string[] {
  return input.split(splitter).filter((s) => s.trim().length > 0);
}