【问题标题】:Legal characters for SASS and SCSS variable namesSASS 和 SCSS 变量名的合法字符
【发布时间】:2013-06-15 23:44:19
【问题描述】:

哪些字符可用于 SCSS 变量名?

【问题讨论】:

  • @Chandrakant 这个问题很清楚。没有细说的余地。
  • @meagar:质量过滤器似乎是disagree:P
  • @BoltClock 质量过滤器是错误的,我想你知道它几乎不会出错。我敢肯定,“我对 SASS 有点菜鸟,这是我的第一个问题,我一直在寻找,但我真的找不到答案,所以如果你伙计们可以帮助我,我真的很感激,所以我想知道的是,当我在 SASS 中有一个变量时,就像 $variable 一样,我可以在我正在输入的变量的名称,比如我可以在 $ 之后使用的有效字母是什么?提前致谢,非常感谢,--accipheran"
  • @cimmanon 我搜索了谷歌并找到答案并不像我想象的那么容易,所以我发了一篇关于它的 SO 帖子。我实际上认为我知道这个问题的答案,但我并不肯定。我在这里发布这个更多是为了社区而不是为了我自己,所以下一个想要找到这个的人有一个不错的 SO 帖子可以去。这并没有阻止我完成任何事情。
  • @cimmanon 你们的cmets质量真的很差。无论我走到哪里,我都看到你告诉人们他们很懒,或者他们的问题很糟糕。这是一个问答网站。有时人们提出问题是因为他们有兴趣看到其他人的答案。

标签: css sass


【解决方案1】:

如果您查看SASS lexer 的来源,您会看到:

# A hash of regular expressions that are used for tokenizing.
REGULAR_EXPRESSIONS = {
  :whitespace => /\s+/,
  :comment => COMMENT,
  :single_line_comment => SINGLE_LINE_COMMENT,
  :variable => /(\$)(#{IDENT})/,
  :ident => /(#{IDENT})(\()?/,
  :number => /(-)?(?:(\d*\.\d+)|(\d+))([a-zA-Z%]+)?/,
  :color => HEXCOLOR,
  :bool => /(true|false)\b/,
  :null => /null\b/,
  :ident_op => %r{(#{Regexp.union(*IDENT_OP_NAMES.map{|s| Regexp.new(Regexp.escape(s) + "(?!#{NMCHAR}|\Z)")})})},
  :op => %r{(#{Regexp.union(*OP_NAMES)})},
}

其中引用了separate file 中定义的IDENT 字符集:

s = if Sass::Util.ruby1_8?
      '\200-\377'
    elsif Sass::Util.macruby?
      '\u0080-\uD7FF\uE000-\uFFFD\U00010000-\U0010FFFF'
    else
      '\u{80}-\u{D7FF}\u{E000}-\u{FFFD}\u{10000}-\u{10FFFF}'
    end

H = /[0-9a-fA-F]/
UNICODE = /\\#{H}{1,6}[ \t\r\n\f]?/

NONASCII = /[#{s}]/
ESCAPE = /#{UNICODE}|\\[ -~#{s}]/
NMSTART = /[_a-zA-Z]|#{NONASCII}|#{ESCAPE}/
NMCHAR = /[a-zA-Z0-9_-]|#{NONASCII}|#{ESCAPE}/

IDENT = /-?#{NMSTART}#{NMCHAR}*/

所以,看起来变量名可以包含:

  • 任何 ASCII 字母。
  • 任何数字 0-9(只要它不是名称中的第一个字符)。
  • 下划线和连字符。
  • ASCII 标点符号 (!"#$%&'()*+,./:;<=>?@[]^{|}~) 和空格(如果使用反斜杠转义)。
  • 0080-D7FF、E000-FFFD 或 10000-10FFFF 范围内的 Unicode 字符。
  • Unicode 十六进制转义序列,例如 \00E4。

【讨论】:

  • 作为记录,在尝试过 +、 之后,我可以确认它们不适用于变量名,至少在我的 sass 编译器 (3.2.12) 中是这样。
  • @lytnus 是正确的;如答案中所述,如果在变量名中使用 ASCII 标点符号,则必须使用反斜杠进行转义(例如 $foo\+bar\<baz 有效,但 $foo+bar<baz 无效)。我不确定为什么这会有用,但语法允许它。
  • 对了,为了大家方便,一个匹配必须替换的ASCII标点的正则表达式如下:/["!#$%&\'()*+,.\/: ;?@[]^\{\}|~]/g
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-07
  • 2018-01-07
  • 2013-03-25
  • 2023-03-27
  • 2018-03-28
  • 2018-12-03
  • 2014-02-09
相关资源
最近更新 更多