子串和正则表达式

时间:2016-07-14 14:14:11

标签: javascript regex lodash

我有一个SQL字符串:

var sql= "AND DT_FIM IS NULL AND ( CD_JOB, DT_INI_JOB ) IN  (SELECT x.CD_JOB, x.DT_INI FROM PRS_JOBS_MAQUINA x  WHERE x.CD_JOB = ':CD_JOB' AND TO_CHAR(x.DT_INI, 'YYYY-MM-DD') = ':DT_INI_JOB' AND x.DT_FIM IS NULL)

我需要提取绑定值(:CD_JOB,:DT_INI_JOB),问题是用

var bindFields=sql.substring(sql.lastIndexOf("':") + 1 , sql.lastIndexOf("'"));

它只返回第一场比赛,我需要两者。 用Javascript可以吗?如果有人发现它有用的话,请拯救它。

https://jsfiddle.net/oq0dmyjo/1/。 Apreciate你的帮助。感谢

2 个答案:

答案 0 :(得分:2)

您可以将非常简单的正则表达式与捕获组一起使用:

parent.getItemAtPosition(pos)

<强>解释

  • /':([^']+)/g - 文字序列':
  • ': - 第1组捕获除([^']+)
  • 以外的1个或多个符号
  • ' - 匹配所有实例的全局修饰符。

以下是一些需要学习的资源:

JS代码:

&#13;
&#13;
g
&#13;
&#13;
&#13;

答案 1 :(得分:0)

由于看起来您正在绑定字段,因此您可能希望将replace与替换函数一起使用。使用@WiktorStribiżew/':([^']+)'/g中的正则表达式,然后像这样使用它:

var sql = "AND DT_FIM IS NULL AND ( CD_JOB, DT_INI_JOB ) IN  (SELECT x.CD_JOB, x.DT_INI FROM PRS_JOBS_MAQUINA x  WHERE x.CD_JOB = ':CD_JOB' AND TO_CHAR(x.DT_INI, 'YYYY-MM-DD') = ':DT_INI_JOB' AND x.DT_FIM IS NULL)";

var fields = {
    CD_JOB: 1,
    DT_INI_JOB: 2
};
sql = sql.replace(/':([^']+)'/g, function($0, $1) {
  return fields[$1];
});
console.log(sql);