diff --git a/frontend/src/container/QueryBuilder/filters/QueryBuilderSearch/utils.ts b/frontend/src/container/QueryBuilder/filters/QueryBuilderSearch/utils.ts index e767550be7..c549a6fd62 100644 --- a/frontend/src/container/QueryBuilder/filters/QueryBuilderSearch/utils.ts +++ b/frontend/src/container/QueryBuilder/filters/QueryBuilderSearch/utils.ts @@ -122,8 +122,17 @@ export function replaceStringWithMaxLength( if (lastSearchValue === '') { return `${mainString}${replacementString},`; } + /** + * We need to escape the special characters in the lastSearchValue else the + * new RegExp fails with error range out of order in char class + */ + const escapedLastSearchValue = lastSearchValue.replace( + /[-/\\^$*+?.()|[\]{}]/g, + '\\$&', + ); + const updatedString = mainString.replace( - new RegExp(`${lastSearchValue}(?=[^${lastSearchValue}]*$)`), + new RegExp(`${escapedLastSearchValue}(?=[^${escapedLastSearchValue}]*$)`), replacementString, ); return `${updatedString},`;