Split with multiple delimiters (with unit tests)

by Lloyd Atkinson

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.8.0/jasmine.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.8.0/jasmine-html.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.8.0/boot.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.8.0/jasmine.min.css">

JavaScript

describe('Extract IDs from string', () => {
    describe('Comma-separated values', () => {
        it('Plain comma-separated values', () => {
            expect(extractIds('abc,abcd,abcde')).toEqual(['abc', 'abcd', 'abcde']);
        });

        it('Comma-separated values with whitespace', () => {
            expect(extractIds('abc, abcd, abcde')).toEqual(['abc', 'abcd', 'abcde']);
        });

        it('Comma-separated values with superfluous commas', () => {
            expect(extractIds(',,,abc, abcd,,, abcde,,,')).toEqual(['abc', 'abcd', 'abcde']);
        });

        it('Comma-separated values with empty cells', () => {
            expect(extractIds('abc, abcd, , abcde,')).toEqual(['abc', 'abcd', 'abcde']);
        });
    });

    describe('Excel/Tab-separated values', () => {
        it('Plain tab-separated values', () => {
            expect(extractIds('abc	abcd	abcde')).toEqual(['abc', 'abcd', 'abcde']);
        });

        it('Tab-separated values with whitespace', () => {
            expect(extractIds('abc, abcd, abcde')).toEqual(['abc', 'abcd', 'abcde']);
        });

        it('Comma-separated values with superfluous tabs', () => {
            expect(extractIds('	abc	abcd	abcde		')).toEqual(['abc', 'abcd', 'abcde']);
        });

        it('Comma-separated values with empty tabs', () => {
            expect(extractIds('	abc		abcd	abcde		')).toEqual(['abc', 'abcd', 'abcde']);
        });
    });

    describe('Extra delimiting characters', () => {
        it('Semicolons', () => {
            expect(extractIds('abc;abcd;abcde')).toEqual(['abc', 'abcd', 'abcde']);
        });

        it('Colons', () => {
            expect(extractIds('abc;abcd;abcde')).toEqual(['abc', 'abcd', 'abcde']);
        });

        it('Hyphens', () => {
            expect(extractIds('abc;abcd;abcde')).toEqual(['abc', 'abcd', 'abcde']);
        });

        it('Dots', () => {
            expect(extractIds('abc;abcd;abcde')).toEqual(['abc', 'abcd', 'abcde']);
        });
...