繁体   English   中英

识别字符是用引号引起来还是用单引号引起来

[英]Recognize if character is wrapped inside quotes or single quotes

我正在尝试用冒号字符解决beautify-js的问题。

问题是它在每个冒号后面添加了一个空格,如果我这样写,这是一个问题:

a:hover 
a::before
::selection
etc

因为它变成:

a: hover 
a: : before
: : selection
etc

因此,我添加了此功能,该功能可以帮助我从要分析的冒号开始查找CSS行的结尾。

function getrow() {
  var test1 = source_text.substr(pos, source_text.indexOf(';') + 1);
  var test2 = source_text.substr(pos, source_text.indexOf('{') + 1);

  if(test1.length > test2.length) {
    return test2;
  } else {
    return test1;
  }
}

有了这个,我可以做:

if(getrow().indexOf("{") !== -1){
  output.push(ch);
} else {
  output.push(ch, " ");
}

在分析结肠时。
如果该行以方括号结尾,则表示任何冒号后都不需要空格。
如果不是,则表示它以分号结尾,因此冒号后需要空格。

我认为此补丁很好用。 唯一的问题是在这种情况下:

a:not("[data-test='some;content']") {

因为在这种情况下, getrow()会在方括号之前找到半冒号,并认为冒号后需要空格。

我知道这是一个非常极端的情况,但我想解决此问题。
我想我应该检查分号是否被引号或单引号引起来,在这种情况下,请忽略它并继续寻找下一个半色或方括号。

我该怎么办?

您可能可以使用正则表达式或其他几种方法来破解它,但是它们仍然可能会出现意外情况(有很多不同的处理字符串的方法)。

这是美化项目一直在努力的前瞻性问题。 该项目中使用的解析器非常擅长向前/向后看,这就是您真正想要在这里做的事情。 您不想沿行显示文本,而是要沿标记查找; {令牌。 这将删除有问题的边缘情况,因为字符串标记(其中带有; )不是; 令牌。

根据代码的不同,您可能能够保存当前状态,并调用令牌生成器向前走,直到遇到这些令牌之一,然后再弹出到保存的状态。

看起来我已经用下面的代码修复了每个错误:

var text_after_pos = source_text.replace(new RegExp("('|\").*('|\")", "gm"), "").substr(pos - 1) + ";",
    semicolon = text_after_pos.substr(0, text_after_pos.indexOf(';')).length,
    closed_brace = text_after_pos.substr(0, text_after_pos.indexOf('}')).length,
    open_brace = text_after_pos.substr(0, text_after_pos.indexOf('{')).length,
    test1 = (semicolon > closed_brace) ? closed_brace : semicolon;

    //console.log(text_after_pos);
    if (test1 > open_brace && open_brace !== 0) {
         output.push(ch);
    } else {
         output.push(ch, " ");
    }

首先,我删除括号之间的文本,然后运行其余测试,以了解冒号是否需要在其后留一个空格。

我已经用下面这个奇怪的CSS示例进行了测试:

a {
    color: purple
}
::selected {
    color: purple
}
a {
    color: purple
}
a:hover {
    color: purple
}
a {
    color: purple
}
a:not("foobar\";{}omg") {
    content: 'example\';{} text';
    content: "example\";}{ text"
}
a {
    color: purple
}

我无法想象要尝试格式化的更糟糕的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM