正则表达式替换某些字符但不适用于javascript中的特定字符集

问题描述 投票:2回答:4
var str='select * from where item1=abcd and price>=20';

我使用下面的代码将'='替换为空格

str=str.replace(/[=]/g, " ")

但它也在取代'>='。我希望> =不要被任何东西替换,还有一些其他条件如'==' or '<='等。

所以我的输出应该是 - 'select * from where item abcd and price>=20'

请帮我实现这个目标。

javascript regex
4个回答
2
投票

使用以下正则表达式进行更换

/([a-z0-9]+)\s*=\s*([a-z0-9]+)/gi

并用$1 $2替换它。

  1. ([a-z0-9]+):匹配一个或多个字母数字字符并将它们添加到捕获组
  2. \s*:零个或多个空格字符
  3. =:等号
  4. gig:匹配所有可能的比赛的全球旗帜。 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'));

1
投票

用两边的字母或数字替换等号,并在空格周围添加相应的字符。

str.replace(/([a-zA-Z0-9])=([a-zA-Z0-9])/, '$1 $2')

在regex []中表示“集合”,因此[a-zA-Z0-9]是任何小写,大写或数字集合中的一个字符。


0
投票

简单而肮脏的把戏。从g中删除regx

var str='select * from where item1=abcd and price>=20';
console.log(str.replace(/[=]/, " "))

0
投票

解决这些问题的一个好方法是捕获您想要跳过的所有内容,然后不捕获您希望删除的所有内容。在你的情况下:

(>=|<=|==|'[^']*(?:''[^']*)*')|=

并用$1取代。

工作示例:https://regex101.com/r/3pT9ib/3

  • 首先,我们有一个捕获组:( ... ),被捕获到$1。 该组织与>=<=相匹配。我还扔了==(这在SQL中有效吗?)并转义SQL字符串,仅用于示例。
  • 如果我们无法匹配该组,我们可以安全地匹配并删除剩余的=

这种方法在这里很好地解释了:Regex Pattern to Match, Excluding when... / Except between

© www.soinside.com 2019 - 2024. All rights reserved.