mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
DEV: Add escapeRegExp util (#17051)
This was re-implemented in a number of places - it makes more sense as a utility function.
This commit is contained in:
parent
3ebfde5ea2
commit
c054a47d9a
@ -0,0 +1,3 @@
|
|||||||
|
export default function escapeRegExp(string) {
|
||||||
|
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
|
||||||
|
}
|
@ -22,6 +22,7 @@ import discourseDebounce from "discourse-common/lib/debounce";
|
|||||||
import { getAbsoluteURL } from "discourse-common/lib/get-url";
|
import { getAbsoluteURL } from "discourse-common/lib/get-url";
|
||||||
import { next, schedule } from "@ember/runloop";
|
import { next, schedule } from "@ember/runloop";
|
||||||
import toMarkdown from "discourse/lib/to-markdown";
|
import toMarkdown from "discourse/lib/to-markdown";
|
||||||
|
import escapeRegExp from "discourse-common/utils/escape-regexp";
|
||||||
|
|
||||||
function getQuoteTitle(element) {
|
function getQuoteTitle(element) {
|
||||||
const titleEl = element.querySelector(".title");
|
const titleEl = element.querySelector(".title");
|
||||||
@ -43,10 +44,6 @@ function fixQuotes(str) {
|
|||||||
return str.replace(/[\u201C\u201D]/g, '"');
|
return str.replace(/[\u201C\u201D]/g, '"');
|
||||||
}
|
}
|
||||||
|
|
||||||
function regexSafeStr(str) {
|
|
||||||
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
||||||
}
|
|
||||||
|
|
||||||
export default Component.extend(KeyEnterEscape, {
|
export default Component.extend(KeyEnterEscape, {
|
||||||
classNames: ["quote-button"],
|
classNames: ["quote-button"],
|
||||||
classNameBindings: [
|
classNameBindings: [
|
||||||
@ -198,7 +195,7 @@ export default Component.extend(KeyEnterEscape, {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (this._canEditPost) {
|
if (this._canEditPost) {
|
||||||
const regexp = new RegExp(regexSafeStr(quoteState.buffer), "gi");
|
const regexp = new RegExp(escapeRegExp(quoteState.buffer), "gi");
|
||||||
const matches = cooked.innerHTML.match(regexp);
|
const matches = cooked.innerHTML.match(regexp);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import DiscourseURL from "discourse/lib/url";
|
import DiscourseURL from "discourse/lib/url";
|
||||||
import { initializeDefaultHomepage } from "discourse/lib/utilities";
|
import { initializeDefaultHomepage } from "discourse/lib/utilities";
|
||||||
|
import escapeRegExp from "discourse-common/utils/escape-regexp";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "url-redirects",
|
name: "url-redirects",
|
||||||
@ -9,7 +10,7 @@ export default {
|
|||||||
const currentUser = container.lookup("current-user:main");
|
const currentUser = container.lookup("current-user:main");
|
||||||
if (currentUser) {
|
if (currentUser) {
|
||||||
const username = currentUser.get("username");
|
const username = currentUser.get("username");
|
||||||
const escapedUsername = username.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
const escapedUsername = escapeRegExp(username);
|
||||||
DiscourseURL.rewrite(
|
DiscourseURL.rewrite(
|
||||||
new RegExp(`^/u/${escapedUsername}/?$`, "i"),
|
new RegExp(`^/u/${escapedUsername}/?$`, "i"),
|
||||||
`/u/${username}/activity`
|
`/u/${username}/activity`
|
||||||
|
@ -21,6 +21,7 @@ import {
|
|||||||
import { cacheShortUploadUrl } from "pretty-text/upload-short-url";
|
import { cacheShortUploadUrl } from "pretty-text/upload-short-url";
|
||||||
import bootbox from "bootbox";
|
import bootbox from "bootbox";
|
||||||
import { run } from "@ember/runloop";
|
import { run } from "@ember/runloop";
|
||||||
|
import escapeRegExp from "discourse-common/utils/escape-regexp";
|
||||||
|
|
||||||
// Note: This mixin is used _in addition_ to the ComposerUpload mixin
|
// Note: This mixin is used _in addition_ to the ComposerUpload mixin
|
||||||
// on the composer-editor component. It overrides some, but not all,
|
// on the composer-editor component. It overrides some, but not all,
|
||||||
@ -489,7 +490,7 @@ export default Mixin.create(ExtendableUploader, UppyS3Multipart, {
|
|||||||
// when adding two separate files with the same filename search for matching
|
// when adding two separate files with the same filename search for matching
|
||||||
// placeholder already existing in the editor ie [Uploading: test.png...]
|
// placeholder already existing in the editor ie [Uploading: test.png...]
|
||||||
// and add order nr to the next one: [Uploading: test.png(1)...]
|
// and add order nr to the next one: [Uploading: test.png(1)...]
|
||||||
const escapedFilename = filename.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
const escapedFilename = escapeRegExp(filename);
|
||||||
const regexString = `\\[${I18n.t("uploading_filename", {
|
const regexString = `\\[${I18n.t("uploading_filename", {
|
||||||
filename: escapedFilename + "(?:\\()?([0-9])?(?:\\))?",
|
filename: escapedFilename + "(?:\\()?([0-9])?(?:\\))?",
|
||||||
})}\\]\\(\\)`;
|
})}\\]\\(\\)`;
|
||||||
|
Loading…
Reference in New Issue
Block a user