簡體   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