diff --git a/frontend/__tests__/unit/components/AnchorTitle.test.tsx b/frontend/__tests__/unit/components/AnchorTitle.test.tsx
index c328495d12..f0a6f3abcc 100644
--- a/frontend/__tests__/unit/components/AnchorTitle.test.tsx
+++ b/frontend/__tests__/unit/components/AnchorTitle.test.tsx
@@ -11,9 +11,9 @@ jest.mock('utils/slugify', () => ({
default: jest.fn((str: string) =>
str
.toLowerCase()
- .replace(/[^a-z0-9]/g, '-')
- .replace(/-{2,10}/g, '-')
- .replace(/(^-{1,10}|-{1,10}$)/g, '')
+ .replaceAll(/[^a-z0-9]/g, '-')
+ .replaceAll(/-{2,10}/g, '-')
+ .replaceAll(/(^-{1,10}|-{1,10}$)/g, '')
),
}))
@@ -652,9 +652,9 @@ describe('AnchorTitle Component', () => {
mockFn.mockImplementation((str: string) =>
str
.toLowerCase()
- .replace(/[^a-z0-9]/g, '-')
- .replace(/-{2,10}/g, '-')
- .replace(/(^-{1,10}|-{1,10}$)/g, '')
+ .replaceAll(/[^a-z0-9]/g, '-')
+ .replaceAll(/-{2,10}/g, '-')
+ .replaceAll(/(^-{1,10}|-{1,10}$)/g, '')
)
const mockScrollTo = jest.spyOn(globalThis, 'scrollTo').mockImplementation()
diff --git a/frontend/__tests__/unit/components/MarkdownWrapper.test.tsx b/frontend/__tests__/unit/components/MarkdownWrapper.test.tsx
index 263e081b2c..83d3579c7e 100644
--- a/frontend/__tests__/unit/components/MarkdownWrapper.test.tsx
+++ b/frontend/__tests__/unit/components/MarkdownWrapper.test.tsx
@@ -11,8 +11,8 @@ jest.mock('markdown-it/index.mjs', () => {
render: (content: string) => {
// Very simple mock: replace **bold** and [link](url)
return content
- .replace(/\*\*(.*?)\*\*/g, '$1')
- .replace(/\[(.*?)\]\((.*?)\)/g, '$1')
+ .replaceAll(/\*\*(.*?)\*\*/g, '$1')
+ .replaceAll(/\[(.*?)\]\((.*?)\)/g, '$1')
},
use: jest.fn().mockReturnThis(),
}))
diff --git a/frontend/__tests__/unit/pages/UserDetails.test.tsx b/frontend/__tests__/unit/pages/UserDetails.test.tsx
index 50e985f44d..a4458e01d8 100644
--- a/frontend/__tests__/unit/pages/UserDetails.test.tsx
+++ b/frontend/__tests__/unit/pages/UserDetails.test.tsx
@@ -41,7 +41,7 @@ jest.mock('components/Badges', () => {
showTooltip?: boolean
}) => (
diff --git a/frontend/src/app/board/[year]/candidates/page.tsx b/frontend/src/app/board/[year]/candidates/page.tsx
index 2ffd58922f..b4d9dd8a59 100644
--- a/frontend/src/app/board/[year]/candidates/page.tsx
+++ b/frontend/src/app/board/[year]/candidates/page.tsx
@@ -189,7 +189,7 @@ const BoardCandidatesPage = () => {
const handleCardClick = () => {
// Convert name to slug format.
- const nameSlug = candidate.memberName.toLowerCase().replace(/\s+/g, '_')
+ const nameSlug = candidate.memberName.toLowerCase().replaceAll(/\s+/g, '_')
const candidateUrl = `https://owasp.org/www-board-candidates/${year}/${nameSlug}.html`
window.open(candidateUrl, '_blank', 'noopener,noreferrer')
}
@@ -295,7 +295,7 @@ const BoardCandidatesPage = () => {
}
className="text-gray-700 dark:text-gray-300"
>
- {candidate.member.bio.replace(/\n+/g, ' ').replace(/\s+/g, ' ').trim()}
+ {candidate.member.bio.replaceAll(/\n+/g, ' ').replaceAll(/\s+/g, ' ').trim()}
)}
diff --git a/frontend/src/components/Badges.tsx b/frontend/src/components/Badges.tsx
index d6c3151392..1af558aa8a 100644
--- a/frontend/src/components/Badges.tsx
+++ b/frontend/src/components/Badges.tsx
@@ -16,7 +16,7 @@ const normalizeCssClass = (cssClass: string | undefined) => {
}
// Convert backend snake_case format to frontend camelCase format
- return cssClass.trim().replace(/_([a-z])/g, (_, letter) => letter.toUpperCase())
+ return cssClass.trim().replaceAll(/_([a-z])/g, (_, letter) => letter.toUpperCase())
}
const resolveIcon = (cssClass: string | undefined) => {
diff --git a/frontend/src/components/BreadCrumbs.tsx b/frontend/src/components/BreadCrumbs.tsx
index 1777f3dc39..83a319a8a8 100644
--- a/frontend/src/components/BreadCrumbs.tsx
+++ b/frontend/src/components/BreadCrumbs.tsx
@@ -43,7 +43,7 @@ export default function BreadCrumbs() {
{segments.map((segment, index) => {
const href = homeRoute + segments.slice(0, index + 1).join(homeRoute)
- const label = upperFirst(segment).replace(/-/g, ' ')
+ const label = upperFirst(segment).replaceAll('-', ' ')
const isLast = index === segments.length - 1
return (
diff --git a/frontend/src/utils/slugify.ts b/frontend/src/utils/slugify.ts
index 06aa3800af..7ad05140dd 100644
--- a/frontend/src/utils/slugify.ts
+++ b/frontend/src/utils/slugify.ts
@@ -1,8 +1,8 @@
export default function slugify(text: string): string {
return text
.normalize('NFKD') // Normalize accented characters
- .replace(/[\u0300-\u036F]/g, '') // Remove diacritics
- .replace(/[^a-zA-Z0-9]+/g, '-') // Replace non-alphanumeric with hyphens
+ .replaceAll(/[\u0300-\u036F]/g, '') // Remove diacritics
+ .replaceAll(/[^a-zA-Z0-9]+/g, '-') // Replace non-alphanumeric with hyphens
.replace(/^[-]+/, '') // Trim leading hyphens
.replace(/[-]+$/, '') // Trim trailing hyphens
.toLowerCase()