我正在尝试在 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/