diff --git a/src/core/services/tests/utils/text.test.ts b/src/core/services/tests/utils/text.test.ts index 67db67650..793546903 100644 --- a/src/core/services/tests/utils/text.test.ts +++ b/src/core/services/tests/utils/text.test.ts @@ -116,4 +116,41 @@ describe('CoreTextUtilsProvider', () => { expect(replaced).toEqual('http://campus.edu?device=iPhone%20or%20iPad&version=1.2.3'); }); + it('counts words', () => { + expect(textUtils.countWords('')).toEqual(0); + expect(textUtils.countWords('one two three four')).toEqual(4); + expect(textUtils.countWords('a\'b')).toEqual(1); + expect(textUtils.countWords('1+1=2')).toEqual(1); + expect(textUtils.countWords(' one-sided ')).toEqual(1); + expect(textUtils.countWords('one two')).toEqual(2); + expect(textUtils.countWords('email@example.com')).toEqual(1); + expect(textUtils.countWords('first\\part second/part')).toEqual(2); + expect(textUtils.countWords('
one two
three four
one two
three four
one two
three four
one two
three four
')).toEqual(4); + expect(textUtils.countWords('one two
three four
')).toEqual(4); + expect(textUtils.countWords('one
four.
')).toEqual(4); + expect(textUtils.countWords('emphasis.
')).toEqual(1); + expect(textUtils.countWords('emphasis.
')).toEqual(1); + expect(textUtils.countWords('emphasis.
')).toEqual(1); + expect(textUtils.countWords('emphasis.
')).toEqual(1); + expect(textUtils.countWords('one\ntwo')).toEqual(2); + expect(textUtils.countWords('one\rtwo')).toEqual(2); + expect(textUtils.countWords('one\ttwo')).toEqual(2); + expect(textUtils.countWords('one\vtwo')).toEqual(2); + expect(textUtils.countWords('one\ftwo')).toEqual(2); + expect(textUtils.countWords('SO42-')).toEqual(1); + expect(textUtils.countWords('4+4=8 i.e. O(1) a,b,c,d I’m black&blue_really')).toEqual(6); + expect(textUtils.countWords('ab')).toEqual(1); + }); + }); diff --git a/src/core/services/utils/text.ts b/src/core/services/utils/text.ts index 80b4cef8c..d5e478100 100644 --- a/src/core/services/utils/text.ts +++ b/src/core/services/utils/text.ts @@ -339,7 +339,7 @@ export class CoreTextUtilsProvider { // Before stripping tags, add a space after the close tag of anything that is not obviously inline. // Also, br is a special case because it definitely delimits a word, but has no close tag. - text = text.replace(/(<\/(?!a>|b>|del>|em>|i>|ins>|s>|small>|strong>|sub>|sup>|u>)\w+>|