js代码是....
var queryString = 'Dolphin Travels (Sagar Travels)';
var results = jsonPath(jsonvar, "$.availableTrips[?("+queryString+")]");
错误 :
SyntaxError: jsonPath: unterminated string literal: _v.travels == 'Dolphin Travels (Sagar Travels)
js代码是....
var queryString = 'Dolphin Travels (Sagar Travels)';
var results = jsonPath(jsonvar, "$.availableTrips[?("+queryString+")]");
错误 :
SyntaxError: jsonPath: unterminated string literal: _v.travels == 'Dolphin Travels (Sagar Travels)
首先,让我们弄清楚一些先决条件:
您正在搜索“Dolphin Travels (Sagar Travels)”,但我在您的测试数据中没有看到这一点(至少您已经展示过),所以我无法确定它在对象/数组的哪个部分(无论是值还是键)。
这是我正在使用的示例数据:
var t = {
'availableTrips': [
{
'busType': 'Volvo A/C-Multi Axle Semi sleeper (2+2)',
'busTypeId': '101',
'fares': 250,
'travels': 'SVR Tours and Travel [Citizen]'
},
{
'busType': 'Lorem Ipsum',
'busTypeId': '102',
'fares': 300,
'travels': 'SVR Tours and Travel [Citizen]'
}
]
}
jsonPath 的简单用法(我也假设您的意思是这个 jsonPath 库,因为您没有指定):
jsonPath(t,'$.availableTrips[?(/SVR/.test(@.travels))]');
产生数组中的对象availableTrips
数组,因为字符串 SVR(作为正则表达式)在它们两者中。
jsonPath(t,'$.availableTrips[?(/Volvo/.test(@.busType))]');
仅产生availableTrips
数组中的第一项,相当于t.availableTrips[0]
.
现在,回答你的问题:
转义时,您可以使用反斜杠\
,但由于您在一个被解释的字符串中,您需要将其转义两次:\\
。一次是作为参数发送的字符串jsonParse
,一次是作为在 中解释的表达式的一部分jsonParse
。像这样:
jsonPath(t,'$.availableTrips[?(/\\(2\\+2\\)/.test(@.busType))]');
请注意,我还必须转义+
量词以及元字符(
和)
组元字符。
在清理用户输入方面,例如var queryString = 'Dolphin Travels (Sagar Travels)';
,您可以执行以下操作(请参阅在正则表达式中必须转义哪些特殊字符?):
var sanitizedQueryString = queryString.replace(/([\.\^\$\*\+\?\(\)\[\{\\\|])/g,'\\$1');