javascript - 识别字符是否包含在引号或单引号内

标签 javascript css

我正在尝试解决 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/

相关文章:

javascript - D3 插入 H3 标签 Google 表格

javascript - AngularJS - 应用程序 Controller

javascript - 如何将修改后的数据从双列表框传递到 Controller ?

javascript - 创建一个可扩展以与中心元素的边缘相交的流动侧边栏

html - 具有 Flex Box 模型的两列输入

php - 如何在ie7中设置兼容性 View ?

javascript - bootstrap multiselect select all 没有出现在列表中

javascript - 有没有可以从网页中删除广告的 JavaScript 库?

javascript - HTML5 拖放文件字段

CSS 列不更新方向变化