![](/img/trans.png)
[英]How to have a PHP variable with HTML wrapped inside of JavaScript with both single quotes and double quotes already used
[英]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.