我正在尝试解决 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()
会找到括号前的分号,并认为冒号后面需要一个空格。
我知道这是一个非常极端的情况,但我想解决这个问题。
我想我应该检查分号是否被引号或单引号包围,在这种情况下忽略它并继续寻找下一个分号或括号。
我该怎么办?
最佳答案
您可能可以使用正则表达式或其他几种方法来解决这个问题,但它们仍然可能有意想不到的边缘情况(有很多不同的方法来处理字符串)。
这是美化元素一直在努力解决的前瞻性问题。该元素中使用的解析器非常擅长向前/向后看,而这正是您在这里真正想要做的。您不想将行作为文本获取,而是希望沿着 标记 向前移动以寻找 ;
或 {
标记。这将消除有问题的边缘情况,因为字符串标记(其中包含 ;
)不是 ;
标记。
根据代码,您可能能够保存当前状态并调用分词器向前走,直到它遇到这些标记之一,然后弹回到您保存的状态。
关于javascript - 识别字符是否包含在引号或单引号内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20059180/