Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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中解析空间敏感字符串的函数?_Javascript_String - Fatal编程技术网

如何制作一个可以在javascript中解析空间敏感字符串的函数?

如何制作一个可以在javascript中解析空间敏感字符串的函数?,javascript,string,Javascript,String,我有一个字符串str定义为: const str = ` @get body { Anything here..... Any no. of lines Or, empty lines as above } ` 我创建了一个函数get(),它通过名称获取元素,@get正在标记,并且是{&}之间的内容。可以这样使用: console.log(get(str)) // body /* Anything here..... Any no.

我有一个字符串str定义为:

const str = `
 @get body {
     Anything here.....
     Any no. of lines

     Or, empty lines as above
 }
`
我创建了一个函数get(),它通过名称获取元素,@get正在标记,并且是{&}之间的内容。可以这样使用:

console.log(get(str))
// body
/*  
     Anything here.....
     Any no. of lines

     Or, empty lines as above
*/
因此,我的函数的来源(我没有太多使用match()的经验,因此我通常使用replace()获取值,并在需要时替换为任何内容,因此请随意编辑我的代码):

所以,现在我的问题是,如果我去掉括号,即{&},会怎么样?假定语法:

const str = `
 @get body 
    Anything here.....
    Any no. of lines

    Or, empty lines as above
 Don't catch me !
`
console.log(get(str))

现在,输出保持不变。如何使我的get()函数对空间敏感。您可以看到句子“不要抓住我!”,前面的空格数与@get相同,因此它被解析为外部内容,而不是声明为@get body块的内容,因此不显示。那么,我在想怎么做呢?在javascript中可以吗?

下面是如何使用正则表达式实现的。我将添加其他逻辑以从找到的内容中删除前导空格:

const str=`
@找到尸体
这里有什么。。。。。
有多少行
或者,如上所述的空行
别抓我!
`;
函数get(str){
让[、名称、内容]=(str.match(/^([]*)@get\s*(.*\s)。*((?:[\r\n]+^\1[].*))/m)|[]);
content=content.trim()
返回[名称、内容];
}

log(get(str))在现场有点太晚了。
但这里有一个使用match的类似函数

const str=`
@找到尸体
这里有什么。。。。。
有多少行
或者,如上所述的空行
别抓住我
`
const get=(str)=>{
让arr=str.match(/@get\s+(\s+)\s*[\r\n]+(\s+)(.[\r\n]+(?:\2.[\r\n]+\s*[\r\n]+)*)/;
设res={
标题:arr[1],
缩进:arr[2],
内容:arr[3]
};   
console.log(res.title,res.content);
};

get(str)你在构建python解释器吗?是的,它看起来很像python,语法很相似,但答案是否定的!我正在试图弄清楚javascript中的语法有多简单。为什么不用更多的代码和更少的正则表达式逐行阅读呢?请添加一个示例我有一个想法。我们可以找到一行的初始位置和第一个单词(即@get here)之间的空格数,并继续匹配它,直到找到相同的值。之后,具有不相似空间计数的行将被包装到{和}中,然后get()可以很容易地理解它。这个好吗?
const str = `
 @get body 
    Anything here.....
    Any no. of lines

    Or, empty lines as above
 Don't catch me !
`
console.log(get(str))