javascript - 正则表达式检测双引号外的模式

标签 javascript c# .net regex string

我有一个像

这样的字符串
FIND files where file2=29 AND file32="12" OR file623134="file23"

此文本由用户输入以搜索他/她的数据。这由应用程序转换为 SQL 查询。

例如:FIND 替换为 SELECT 和带有模式 file[number] 的字符串(例如:file2file32file623134,如上面的字符串所示。)转换为 FILE_ID=[number] AND FILE_VALUE=[value of FILE[number]。生成的 SQL 查询将是:

SELECT * FROM [FILES] WHERE (FILE_ID=2 AND FILE_VALUE=29) AND (FILE_ID=32 AND FILE_VALUE="12") OR (FILE_ID=623134 AND FILEVALUE="file23")

到目前为止,在其他 SO 问题的帮助下,我所取得的成就是使用以下正则表达式检测双引号外的字符串:

(?<![\S"])([^"\s]+)(?![\S"])

它工作正常。但是由于我缺乏关于正则表达式的知识,我无法在此正则表达式中找到可以放置 file[0-9] 模式的位置。请告诉我如何实现这一目标?

如果可能的话,请告诉我如何从这些模式中提取值并将它们替换为相应的值,例如 file123=2(FILE_ID=123 AND FILE_VALUE=2).

最佳答案

这是另一种两步法:

  • 获取其中包含 ID 的键值对,并使用反向引用替换
  • 将开头部分(文字 "FIND files where")替换为另一个文字 "SELECT * FROM [FILES] WHERE"

C# demo :

var str = "FIND files where file2=29 AND file32=\"12\" OR file623134=\"file23\"";
var rx = new Regex(@"\bfile(\d+)=""?(\w+)""?");
var result = rx.Replace(str, "(FILE_ID=$1 AND FILE_VALUE=$2)")
              .Replace("FIND files where", "SELECT * FROM [FILES] WHERE");
Console.WriteLine(result);

结果:

SELECT * FROM [FILES] WHERE (FILE_ID=2 AND FILE_VALUE=29) AND (FILE_ID=32 AND FILE_VALUE=12) OR (FILE_ID=623134 AND FILE_VALUE=file23)

正则表达式分解:

  • \bfile - 前面没有单词字符的 file 文字
  • (\d+) - 捕获到第 1 组的 1 个或多个数字
  • = - 文字 =
  • "? - 1 或 0 个双引号
  • (\w+) - 由 1 个或多个字母数字符号(字母、数字或下划线)组成的第二个捕获组
  • "? - 1 或 0 个双引号

关于javascript - 正则表达式检测双引号外的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33258416/

相关文章:

c# - 创建全局集合并从所有页面访问它 (C# Windows)

javascript - 强制 window.open() 在 chrome 中创建新选项卡

javascript - 使用 jimp 在 Node.js 中调整图像大小并获取新图像的路径

javascript - 如何更改链接的文本和功能?

c# - WCF HTTP 和 NamedPipe 服务

.net - Entity Framework v4 : Preventing Storage Model Overwrites by Update Model Wizard

.net - 数字签名后托管 Windows 服务启动缓慢

javascript - React Native Slider 更新不正确的步长值

c# - 如何使用 System.Text.Json 忽略常量属性的 JSON 序列化?

c# - 我如何知道 MonoTouch 中的 UIDevice 模型?