diff --git a/packages/grafana-data/src/text/string.ts b/packages/grafana-data/src/text/string.ts index 4031ea6fdb1..41fb2d0b4c1 100644 --- a/packages/grafana-data/src/text/string.ts +++ b/packages/grafana-data/src/text/string.ts @@ -34,7 +34,7 @@ export function stringToJsRegex(str: string): RegExp { return new RegExp(`^${str}$`); } - const match = str.match(new RegExp('^/(.*?)/(g?i?m?y?)$')); + const match = str.match(new RegExp('^/(.*?)/(g?i?m?y?s?)$')); if (!match) { throw new Error(`'${str}' is not a valid regular expression.`); diff --git a/packages/grafana-data/src/utils/valueMappings.test.ts b/packages/grafana-data/src/utils/valueMappings.test.ts index 8acee459ce7..1d656debfef 100644 --- a/packages/grafana-data/src/utils/valueMappings.test.ts +++ b/packages/grafana-data/src/utils/valueMappings.test.ts @@ -85,6 +85,16 @@ const testSet2: ValueMapping[] = [ }, ]; +const testSet3: ValueMapping[] = [ + { + type: MappingType.RegexToText, + options: { + pattern: '/.*/s', + result: { text: 'WOW IT REPLACED EVERYTHING OVER MULTIPLE LINES' }, + }, + }, +]; + describe('Format value with value mappings', () => { it('should return null with no valuemappings', () => { const valueMappings: ValueMapping[] = []; @@ -194,6 +204,12 @@ describe('Format value with regex mappings', () => { it('should not replace match when replace text is null', () => { expect(getValueMappingResult(testSet2, 'hello my name is')).toEqual({ color: 'red' }); }); + + it('supports replacing over multiple lines', () => { + expect(getValueMappingResult(testSet3, 'hello \n my name is')).toEqual({ + text: 'WOW IT REPLACED EVERYTHING OVER MULTIPLE LINES', + }); + }); }); describe('isNumeric', () => {