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

标签 javascript regex

我正在尝试在 Javascript 中进行简单的正则表达式匹配,但无法弄清楚其中的逻辑。基本上我在源代码中有一个函数,我正在将其转换为字符串。它有点复杂,但函数的一部分(数组部分)是由 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 中没有否定先行:

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

已经很接近了,但还没有完全实现?我认为这是我有问题的声明的第一部分......

感谢您的帮助!

最佳答案

为什么不做一些像这样简单的事情呢?

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 中简单地生成一个数据结构(例如数组),然后将该数组传递给 Choose_My_Saved_Billing 函数或简单地使用闭包。这样,您就不必从函数的源代码中提取数据。

关于Javascript RegEx .match() 与 $1、$2 等选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24539497/

相关文章:

javascript - 在 for 循环之外定义的正则表达式不起作用

Python Split Regex 没有拆分我需要的东西

javascript - jQuery 点击事件 PreventDefault

javascript - 创建 jQuery Accordion 插件的困难( super 整洁!)

javascript - 如何在 jquery 中触发模糊事件

python - 从字符到单词结尾的子字符串正则表达式

php - 使用 php 变量的 preg_match 问题

javascript - 在 Sequelize 中减去 2 个字段

javascript - socket.io,使用 PHP session 作为带有 redis 的 socket.id

javascript - 使用 angular-mocks 匹配所有 GET url for backendless