我试图在Javascript中进行简单的RegEx匹配,并且无法弄清楚逻辑。基本上我在源代码中有一个函数,我转换为字符串。它有点复杂,但是部分功能(数组部分)是由ASP服务器端代码生成的,因此功能总是不同的,具体取决于访问页面的用户。我猜这不是很相关,但很高兴知道我为什么这么做以及我想要完成什么。功能如下:
function Choose_My_Saved_Billing(arg_index) {
switch(arg_index) {
case 1 : {
ChosenCopy(document.OnePageCheckoutForm, 'billing', 'Test', 'Name', '', '123 Main Dr.', 'none', 'Los Angeles', 'CA', '90046', 'USA', '3105551234', '','');
document.getElementById('span_v1state_dropdown').style.display='none'; document.getElementById('span_v1state_textbox').style.display='block'; break }
}
if (arg_index > 0) {
document.getElementById('span_remove_selected_billing').style.display='block';
} else {
document.getElementById('span_remove_selected_billing').style.display='none';
}
if (typeof v65DecideCopyBillingToShipping == 'function') {
v65DecideCopyBillingToShipping(true);
}
}
我试图在' OnePageCheckoutForm'之后获取数组中的那些值。并将它们放入一个我可以使用其他代码访问的数组中。我生成的字符串是:
var function_string = Choose_My_Saved_Billing.toString();
var matches = function_string.match(/(')(.*?)(',)/g);
我想要的只是匹配模式中$ 2变量的值。确定我想要的值的唯一方法是使用尾随逗号的单引号(否则它将匹配函数中的其他变量值,如span_remove_selected_billing
),但我不想要单引号结果匹配中的逗号或逗号。
有没有办法在匹配语句中获得第二个括号?
我尝试过尝试使用负面预测,但我想我遇到了麻烦,因为Javascript中没有负面看法:
(')(.*?)(?=',)
它很近但不完全在那里?我认为这是声明中我遇到问题的第一部分......
感谢您的帮助!
答案 0 :(得分:2)
为什么不这么简单?
var function_string = Choose_My_Saved_Billing.toString();
var matches = function_string.match(/document\.OnePageCheckoutForm,(.+?)\);/);
var values = matches[1].split(',').map(function (v) {
return v.trim().slice(1, -1);
});
console.log(values); //["billing", "Test", "Name", "", "123 Main Dr.", "none", "Los Angeles", "CA", "90046", "USA", "3105551234", "", ""]
顺便说一下,为什么不在ASP中生成数据结构(例如数组),然后将该数组传递给ASP,而不是试图解析功能非常容易出错的源代码。 Choose_My_Saved_Billing
函数或只是使用闭包。这样,您就不必从函数的源代码中提取数据。