0

如何在javascript或jquery中解析以下字符串

var str = "(obj.userAge EQUALS  "51") AND (obj.userAddress CONTAINS "STREET1 (SOUTH)") OR (obj2.salary >= "3000.12")";

输出如下。

obj
userAge
EQUALS
51
AND
obj
userAddress
CONTAINS
STREET1 (SOUTH)
OR
obj2
salary
>=
3000.12

我尝试了str.split();另一个splitsplit但我没有得到高于结果。

4

2 回答 2

2

使用正则表达式拆分它

var str = '(obj.userAge EQUALS  "51") AND (obj.userAddress CONTAINS "STREET1") OR (obj2.salary >= "3000")';
var parts = str.split(/[\s\.\(\)]/)

然后忽略所有""字符串

演示:小提琴

于 2013-05-01T08:57:09.290 回答
1

这是一个替代方案

var str = '(obj.userAge EQUALS  "51") AND (obj.userAddress CONTAINS "STREET1") OR (obj2.salary >= "3000")';

console.log(str.replace(/[()]/g, "").split(/[\. ]/));

jsfiddle 上

如果您的地址中有空格,例如“STRE ET1”,或者地址或数字包含句点“。”,则可接受的方法和上述方法都会出现问题。

但这应该可以解决这些问题

var str = '(obj.userAge EQUALS  "51") AND (obj.userAddress CONTAINS "STR EET1.SOME WHERE") OR (obj2.salary >= "3000")';

console.log(str.replace(/[()]/g, "").match(/(?:[^\s\."]+|"[^"]*")+/g));

在 jsfiddle 上

如果地址包含“(”或“)”,上述两个仍然会有问题,这也可以修复,下面应该修复它。

var str = '(obj.userAge EQUALS  "51") AND (obj.userAddress CONTAINS "STR EET1.()SOME WHERE") OR (obj2.salary >= "3000")';

console.log(str.match(/(?:[^\s\.()"]+|"[^"]*")+/g));

jsfiddle 上

使用这些方法无需忽略任何返回的空字符串 ("")

为了利益起见,所有方法的jsperf

于 2013-05-01T10:10:20.057 回答