![](/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.