Javascript RegEx .match()与$ 1,$ 2等选择器

时间:2014-07-02 19:29:20

标签: javascript regex

我试图在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中没有负面看法:

(')(.*?)(?=',)

它很近但不完全在那里?我认为这是声明中我遇到问题的第一部分......

感谢您的帮助!

1 个答案:

答案 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函数或只是使用闭包。这样,您就不必从函数的源代码中提取数据。