Regex заменяет символ (@), но только в конце фразы - PullRequest
0 голосов
/ 17 мая 2019

https://regex101.com/

хочу, чтобы с помощью регулярных выражений обнаруживались все фразы, заканчивающиеся на @, поэтому в возвышенном тексте заменить пустым пробелом, например

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';

, так как ($ - соответствует концу строки) пытался @ $ или [@] $, но не обнаруживает никого с [@ $], обнаруживает все так, как это будет @ только так ... правильный путь?

Ответы [ 3 ]

3 голосов
/ 17 мая 2019

вы можете использовать следующее: / [@] [\ W] /

Это регулярное выражение будет проверять символ @ буквально, а после этого один несловарный символ (aнапример, пробел).

Просто замените то, что вы нашли, одним пробелом.

Вы можете посмотреть это регулярное выражение здесь: https://regex101.com/r/eeuw30/1

0 голосов
/ 17 мая 2019

Реализация 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, '$1'));

Я бы пошел с (@\w+)@ с global и multiline (/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';
0 голосов
/ 17 мая 2019

Вы можете просто использовать пробел после второго @ в качестве границы и написать выражение, возможно, похожее на:

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

Демо

RegEx

Если это не было вашим желаемым выражением, вы можете изменить / изменить его выражения в regex101.com .

enter image description here

RegEx Circuit

Вы также можете визуализировать свои выражения в jex.im :

enter image description here

...