用占位符替换两个关键字的正则表达式,其中1可以是另一个关键字的一部分

Regex for replacing two keywords with placeholders where 1 could be part of another

本文关键字:关键字 其中 一部分 另一个 正则表达式 两个 占位符 替换      更新时间:2023-09-26

以下URL的主要内容可供管理员编辑:http://www.vroomvroomvroom.com/terms-and-conditions/united-states/advantage/

有2个关键字需要替换为占位符。这些关键字可能出现0到n次。管理员在编辑内容时知道这些关键字。

任务是准备一个正则表达式,它可以用占位符替换这两个关键字,它们是:

  1. [COMPANY_NAME]例如:VroomVroomVroom.com或RentalCarmomma.com
  2. [CUSTOMER_SERVICE_EMAIL]例如:info@vroomvroomvroom.com或help@vroomvroomvroom.com

这里的挑战是第一个关键字可能是第二个关键字的一部分,这使得很难通过简单的替换函数来替换。谁能帮我准备这样一个正则表达式的javascript。

仅供参考:文本是HTML而不是简单的文本。

(更新)

目前我使用的是:

$(".cms-editor").html().replace(/vroomvroomvroom.com/ig, "[COMPANY_NAME]"). 

这个没用因为它可以替换部分其他关键字[CUSTOMER_SERVICE_EMAIL]然后我不能用占位符

替换第二个关键字
var str = "vroomvroomvroom.com info@vroomvroomvroom.com";
str.replace(/(^|[^@])vroomvroomvroom'.com/ig, "$1[COMPANY_NAME]");

结果是……

[COMPANY_NAME] info@vroomvroomvroom.com

小提琴


解释:

  • ^匹配文本的开头
  • [^@]匹配任何非@符号

所以两者结合|(或操作符)将匹配文本的开头,或任何不是@符号的内容。

还需要在替换字符串中使用反向引用(" $1 [COMPANY_NAME]"),否则不是@符号的字符也将被替换。反向引用将此char再次放回。

还要注意,我转义了"。com"中的点,这个点匹配除了新行以外的任何字符,所以它必须用反斜杠转义。如果没有转义,它将匹配像"vroomvroomvroom_com"这样的字符串,其中下划线可以是任何其他字符。