Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用JS/NodeJS从文件中测试和读取变量_Javascript_Regex - Fatal编程技术网

Javascript 使用JS/NodeJS从文件中测试和读取变量

Javascript 使用JS/NodeJS从文件中测试和读取变量,javascript,regex,Javascript,Regex,我正在创建一个能够读取环境文件的脚本。内容可以如下所示: var1 = 'test' var2='test2' var1= 'test' var3 = 4 我想提取密钥和值,例如: var1 = 'test' -> result[0]: var1, result[1]: test 我如何编写一个函数来测试使用readFile读取的行是否有效,以及之后它的键是否有效(例如var1)和值是否有效(例如test)?是否可以在不运行两个regexp函数的情况下使用regexp同时提取键和值?

我正在创建一个能够读取环境文件的脚本。内容可以如下所示:

var1 = 'test'
var2='test2'
var1= 'test'
var3 = 4
我想提取密钥和值,例如:

var1 = 'test' -> result[0]: var1, result[1]: test
我如何编写一个函数来测试使用
readFile
读取的行是否有效,以及之后它的
键是否有效(例如var1)和
值是否有效(例如test)?是否可以在不运行两个regexp函数的情况下使用regexp同时提取键和值?

  • 读台词。。将引号替换为null

    //line = "var1 = 'test'";
    line = line.replace(/'/g, "");
    
  • 按分隔符拆分
    =

    var result = line.split("="); 
    //result is an array containing "var1" and "test"
    
line=“var1=”测试“;
行=行。替换(/“/g,”);
var结果=行分割(“=”);
document.write(“key=>”+结果[0].trim());
document.write(“:value=>”+结果[1].trim())
  • 读台词。。将引号替换为null

    //line = "var1 = 'test'";
    line = line.replace(/'/g, "");
    
  • 按分隔符拆分
    =

    var result = line.split("="); 
    //result is an array containing "var1" and "test"
    
line=“var1=”测试“;
行=行。替换(/“/g,”);
var结果=行分割(“=”);
document.write(“key=>”+结果[0].trim());
document.write(“:value=>”+结果[1].trim())
  • 读台词。。将引号替换为null

    //line = "var1 = 'test'";
    line = line.replace(/'/g, "");
    
  • 按分隔符拆分
    =

    var result = line.split("="); 
    //result is an array containing "var1" and "test"
    
line=“var1=”测试“;
行=行。替换(/“/g,”);
var结果=行分割(“=”);
document.write(“key=>”+结果[0].trim());
document.write(“:value=>”+结果[1].trim())
  • 读台词。。将引号替换为null

    //line = "var1 = 'test'";
    line = line.replace(/'/g, "");
    
  • 按分隔符拆分
    =

    var result = line.split("="); 
    //result is an array containing "var1" and "test"
    
line=“var1=”测试“;
行=行。替换(/“/g,”);
var结果=行分割(“=”);
document.write(“key=>”+结果[0].trim());

document.write(“:value=>”+结果[1].trim())您可以尝试以下JS代码:

函数验证(str)
{
变量re=/^(\w+)\s*\=\s*(['“])(.*?)\2$/;
如果((m=re.exec(str))!==null){
返回[m[1],m[3];
}
}
document.getElementById(“res”).innerHTML=
“结果[0]:”+验证(“var1=‘test’”)[0]+“
结果[1]:”+验证(“var1=‘test’”)[1];

您可以尝试以下JS代码:

函数验证(str)
{
变量re=/^(\w+)\s*\=\s*(['“])(.*?)\2$/;
如果((m=re.exec(str))!==null){
返回[m[1],m[3];
}
}
document.getElementById(“res”).innerHTML=
“结果[0]:”+validate(“var1=‘test’”)[0]+“
结果[1]:”+validate(“var1=‘test’”)[1]
您可以尝试以下JS代码:

函数验证(str)
{
变量re=/^(\w+)\s*\=\s*(['“])(.*?)\2$/;
如果((m=re.exec(str))!==null){
返回[m[1],m[3];
}
}
document.getElementById(“res”).innerHTML=
“结果[0]:”+验证(“var1=‘test’”)[0]+“
结果[1]:”+验证(“var1=‘test’”)[1];

您可以尝试以下JS代码:

函数验证(str)
{
变量re=/^(\w+)\s*\=\s*(['“])(.*?)\2$/;
如果((m=re.exec(str))!==null){
返回[m[1],m[3];
}
}
document.getElementById(“res”).innerHTML=
“结果[0]:”+validate(“var1=‘test’”)[0]+“
结果[1]:”+validate(“var1=‘test’”)[1]
存储行后,可以执行以下操作:

// line is the line you are processing, object is where you save your stuff
function processLine(line, object) {
    var parts = line.split("=");

    if (parts.length<2)
         return;

    // key is parts[0], value is parts[1]
    var key = parts.shift();
    // if we have equal signs in our value, they will be preserved
    var value = parts.join("=");

    // get rid of any trailing or preceding spaces
    key = key.trim();
    value = value.trim();

    // is the value a quoted string?
    if ((value.charAt(0)==="'" && value.charAt(value.length-1)==="'") ||
        (value.charAt(0)==='"' && value.charAt(value.length-1)==='"'))
        value = value.slice(1, value.length-1);
    // otherwise we assume it's a number
    else
        value = parseFloat(value);
    // TODO: you can check for other stuff here, such as 'true', 'false' and 'null'

    // finally, assign it to your object
    object[key] = value;
}

这种方法的警告有很多。它们很容易用一些额外的代码修复,但我建议使用JSON之类的东西来定义配置值(如果它们是这样的话)。javascript中有对JSON解析的本机支持,所以您可以直接使用它。也许你应该重新考虑你的方法。

一旦你储存了你的线路,你可以这样做:

// line is the line you are processing, object is where you save your stuff
function processLine(line, object) {
    var parts = line.split("=");

    if (parts.length<2)
         return;

    // key is parts[0], value is parts[1]
    var key = parts.shift();
    // if we have equal signs in our value, they will be preserved
    var value = parts.join("=");

    // get rid of any trailing or preceding spaces
    key = key.trim();
    value = value.trim();

    // is the value a quoted string?
    if ((value.charAt(0)==="'" && value.charAt(value.length-1)==="'") ||
        (value.charAt(0)==='"' && value.charAt(value.length-1)==='"'))
        value = value.slice(1, value.length-1);
    // otherwise we assume it's a number
    else
        value = parseFloat(value);
    // TODO: you can check for other stuff here, such as 'true', 'false' and 'null'

    // finally, assign it to your object
    object[key] = value;
}

这种方法的警告有很多。它们很容易用一些额外的代码修复,但我建议使用JSON之类的东西来定义配置值(如果它们是这样的话)。javascript中有对JSON解析的本机支持,所以您可以直接使用它。也许你应该重新考虑你的方法。

一旦你储存了你的线路,你可以这样做:

// line is the line you are processing, object is where you save your stuff
function processLine(line, object) {
    var parts = line.split("=");

    if (parts.length<2)
         return;

    // key is parts[0], value is parts[1]
    var key = parts.shift();
    // if we have equal signs in our value, they will be preserved
    var value = parts.join("=");

    // get rid of any trailing or preceding spaces
    key = key.trim();
    value = value.trim();

    // is the value a quoted string?
    if ((value.charAt(0)==="'" && value.charAt(value.length-1)==="'") ||
        (value.charAt(0)==='"' && value.charAt(value.length-1)==='"'))
        value = value.slice(1, value.length-1);
    // otherwise we assume it's a number
    else
        value = parseFloat(value);
    // TODO: you can check for other stuff here, such as 'true', 'false' and 'null'

    // finally, assign it to your object
    object[key] = value;
}

这种方法的警告有很多。它们很容易用一些额外的代码修复,但我建议使用JSON之类的东西来定义配置值(如果它们是这样的话)。javascript中有对JSON解析的本机支持,所以您可以直接使用它。也许你应该重新考虑你的方法。

一旦你储存了你的线路,你可以这样做:

// line is the line you are processing, object is where you save your stuff
function processLine(line, object) {
    var parts = line.split("=");

    if (parts.length<2)
         return;

    // key is parts[0], value is parts[1]
    var key = parts.shift();
    // if we have equal signs in our value, they will be preserved
    var value = parts.join("=");

    // get rid of any trailing or preceding spaces
    key = key.trim();
    value = value.trim();

    // is the value a quoted string?
    if ((value.charAt(0)==="'" && value.charAt(value.length-1)==="'") ||
        (value.charAt(0)==='"' && value.charAt(value.length-1)==='"'))
        value = value.slice(1, value.length-1);
    // otherwise we assume it's a number
    else
        value = parseFloat(value);
    // TODO: you can check for other stuff here, such as 'true', 'false' and 'null'

    // finally, assign it to your object
    object[key] = value;
}


这种方法的警告有很多。它们很容易用一些额外的代码修复,但我建议使用JSON之类的东西来定义配置值(如果它们是这样的话)。javascript中有对JSON解析的本机支持,所以您可以直接使用它。也许你应该重新考虑你的方法。

@thefourtheye,这是一个输入错误,它应该只是一个数字。@karthikmanchala,对于
var1='test'
我希望数组包含(1)键和(2)值。在本例中,哪个是
var1
,后面是
test
。不太清楚您要做什么?您能提供样本输入和预期输出吗?也应对该输入进行验证吗?示例:如果
var4='test
输出应该是什么?@karthikmanchala,输出应该是键和值,基本上是位于等号左右两侧的值,并删除引号。@thefourtheye,这是一个打字错误,它应该只是一个数字。@karthikmanchala,对于
var1='test'
我希望数组包含(1)键和(2)值。在本例中,哪个是
var1
,后面是
test
。不太清楚您要做什么?您能提供样本输入和预期输出吗?也应对该输入进行验证吗?示例:如果
var4='test
输出应该是什么?@karthikmanchala,输出应该是键和值,基本上是位于等号左右两侧的值,带引号