简体   繁体   English

多字符串拆分javascript

[英]multiple string split javascript

I'm working on an application that injects one query in a record field in a database . 我正在开发一个将一个查询插入数据库的记录字段中的应用程序。 at the moment I need to take a string that contains a query and divide by commas 此刻,我需要一个包含查询的字符串并用逗号除

This is the string 这是字符串

APDoc.brn, APDoc.rbtn, APDoc.perd, APDoc.dtip, APDoc.U5, APDoc.Stt, APDoc.Ivcn, APDoc.InvcD, APDoc.Vndd AS Rut, Venr.ae AS Proveedor, APDoc.At, CASE APDoc.Dcype WHEN 'AD' THEN APDoc.OgDocmt * -1  WHEN 'PP' THEN APDoc.OrocAmt * -1 ELSE APDoc.OrocAmt END AS [Monto Fac], APDoc.POr, APDoc.Sb AS Entidad, APDoc.ProjeD, CASE APDoc.Dype WHEN 'AD' THEN APDoc.Dal * -1 WHEN 'PP' THEN APDoc.Dal * -1 ELSE APDoc.Dal END AS Saldo,  datediff(day, APDoc.Inate, GETDATE()) AS DIFERENCIA_DIAS 

basically had no problems by separating them with a split () and join () 通过使用split()和join()分隔它们基本上没有问题

queryCortada      = queryCortada.split("AND").join(",").split("OR").join(",").split("(").join("").split(")").join("").split(",");

the problem is that the last field separates it into the following 问题是最后一个字段将其分为以下几个部分

datediff(day,
APDoc.Inate,
GETDATE()) AS DIFERENCIA_DIAS 

I need this field being only one, the idea is to have the following 我只需要一个字段,想法是

APDoc.brn,
APDoc.rbtn,
APDoc.perd,
APDoc.dtip,
APDoc.U5,
APDoc.Stt,
APDoc.Ivcn,
APDoc.InvcD,
APDoc.Vndd AS Rut,
Venr.ae AS Proveedor,
APDoc.At,
CASE APDoc.Dcype WHEN 'AD' THEN APDoc.OgDocmt * -1  WHEN 'PP' THEN APDoc.OrocAmt * -1 ELSE APDoc.OrocAmt END AS [Monto Fac],
APDoc.POr, APDoc.Sb AS Entidad,
APDoc.ProjeD, CASE APDoc.Dype WHEN 'AD' THEN APDoc.Dal * -1 WHEN 'PP' THEN APDoc.Dal * -1 ELSE APDoc.Dal END AS Saldo,
datediff(day, APDoc.Inate, GETDATE()) AS DIFERENCIA_DIAS

The original text could contain more than one field as datediff( asdas,asdasd,asdasd) 原始文本可能包含多个字段作为datediff(asdas,asdasd,asdasd)

To do this you either need to write a complex regex or parse the string through a lexical state-machine. 为此,您需要编写复杂的正则表达式或通过词法状态机解析字符串。

A simple split will always cause issues with future statements even if you think you covered your bases today. 即使您认为今天已经涵盖了基础知识,简单的划分也总是会导致将来的声明出现问题。

你可以试试这个吗?

queryCortada.replace(/\((.*)\)+/g, "(temp**comma)").split("AND").join(",").split("OR").join(",").split("(").join("").split(")").join("").replace(/temp\*\*comma/g, ",").split(",");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM