var str='select * from where item1=abcd and price>=20';
我使用下面的代码将'='替换为空格
str=str.replace(/[=]/g, " ")
但它也在取代'>='
。我希望> =不要被任何东西替换,还有一些其他条件如'==' or '<='
等。
所以我的输出应该是 - 'select * from where item abcd and price>=20'
请帮我实现这个目标。
使用以下正则表达式进行更换
/([a-z0-9]+)\s*=\s*([a-z0-9]+)/gi
并用$1 $2
替换它。
([a-z0-9]+)
:匹配一个或多个字母数字字符并将它们添加到捕获组\s*
:零个或多个空格字符=
:等号gi
:g
:匹配所有可能的比赛的全球旗帜。 i
:不区分大小写的标志。替换部分中的$n
是第n个被捕获的组值。
var regex = /([a-z0-9]+)\s*=\s*([a-z0-9]+)/gi;
var str = 'select * from where item1=abcd and price>=20';
console.log(str.replace(regex, '$1 $2'));
用两边的字母或数字替换等号,并在空格周围添加相应的字符。
str.replace(/([a-zA-Z0-9])=([a-zA-Z0-9])/, '$1 $2')
在regex []中表示“集合”,因此[a-zA-Z0-9]是任何小写,大写或数字集合中的一个字符。
简单而肮脏的把戏。从g
中删除regx
var str='select * from where item1=abcd and price>=20';
console.log(str.replace(/[=]/, " "))
解决这些问题的一个好方法是捕获您想要跳过的所有内容,然后不捕获您希望删除的所有内容。在你的情况下:
(>=|<=|==|'[^']*(?:''[^']*)*')|=
并用$1
取代。
工作示例:https://regex101.com/r/3pT9ib/3
(
... )
,被捕获到$1
。
该组织与>=
和<=
相匹配。我还扔了==
(这在SQL中有效吗?)并转义SQL字符串,仅用于示例。=
。这种方法在这里很好地解释了:Regex Pattern to Match, Excluding when... / Except between