如何在javascript中解析奇怪的字符串

时间:2013-05-01 08:54:59

标签: javascript jquery

如何在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();和另一个split split,但我没有达到结果。

2 个答案:

答案 0 :(得分:2)

使用正则表达式将其拆分

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

然后忽略所有""字符串

演示:Fiddle

答案 1 :(得分: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