正则表达式替换字符 (@) 但仅在短语末尾

Regex replace character (@) but only at end of phrase

https://regex101.com/

想要使用正则表达式检测所有以 @ 结尾的短语,因此在 sublime 文本中用空 space 替换例如

DECLARE @showBrand@ VARCHAR(MAX) = '1';
DECLARE @showBrandImage@ VARCHAR(MAX) = '[]';
DECLARE @ShowBrandLink@ VARCHAR(MAX) = '[]';
DECLARE @ShowbreakLineAfterSize@ VARCHAR(MAX) = '[]';
DECLARE @showbreaklineAfterStock@ VARCHAR(MAX) = '[]';
DECLARE @showBuyBtn@ VARCHAR(MAX) = '1';

并得到

DECLARE @showBrand VARCHAR(MAX) = '1';
DECLARE @showBrandImage VARCHAR(MAX) = '[]';
DECLARE @ShowBrandLink VARCHAR(MAX) = '[]';
DECLARE @ShowbreakLineAfterSize VARCHAR(MAX) = '[]';
DECLARE @showbreaklineAfterStock VARCHAR(MAX) = '[]';
DECLARE @showBuyBtn VARCHAR(MAX) = '1';

so as ($ - Matches the end of a string) was trying @$ or [@]$ 但没有检测到任何 [@$] 检测到所有因为它会是 @ only 所以...什么是正确的方法吗?

您可以使用以下内容:/[@][\W]/

此正则表达式将逐字检查 @ 字符,然后检查单个 non-word 字符(例如 space)。

只需将找到的内容替换为单个 space。

您可以在此处查看此正则表达式:https://regex101.com/r/eeuw30/1

你可以简单的用第二个@后面的space作为分界,写一个表达式,可能类似于:

(.*?)(@)(\s.*)

Demo

正则表达式

如果这不是您想要的表达方式,您可以 modify/change 您的表达方式 regex101.com

正则表达式电路

您还可以在 jex.im:

中可视化您的表情

Javascript 实施:

const needle = `
DECLARE @showBrand@ VARCHAR(MAX) = '1';
DECLARE @showBrandImage@ VARCHAR(MAX) = '[]';
DECLARE @ShowBrandLink@ VARCHAR(MAX) = '[]';
DECLARE @ShowbreakLineAfterSize@ VARCHAR(MAX) = '[]';
DECLARE @showbreaklineAfterStock@ VARCHAR(MAX) = '[]';
DECLARE @showBuyBtn@ VARCHAR(MAX) = '1';
`;
console.log(needle.replace(/(@\w+)@/gm, ''));

我会选择 (@\w+)@globalmultiline (/gm) 并使用第 1 组匹配替换。

https://regex101.com/r/Sv1zT7/1/

结果会是

DECLARE @showBrand VARCHAR(MAX) = '1';
DECLARE @showBrandImage VARCHAR(MAX) = '[]';
DECLARE @ShowBrandLink VARCHAR(MAX) = '[]';
DECLARE @ShowbreakLineAfterSize VARCHAR(MAX) = '[]';
DECLARE @showbreaklineAfterStock VARCHAR(MAX) = '[]';
DECLARE @showBuyBtn VARCHAR(MAX) = '1';