我正在尝试做一个CamelCase Jekyll过滤器。
=begin
# Custom to camelcase function
# Usage:
# 'string'.camelize
# 'string'.camelize(:lower)
=end
class String
def camelize(*separators)
case separators.first
when Symbol, TrueClass, FalseClass, NilClass
first_letter = separators.shift
end
separators = ['_', '\s'] if separators.empty?
str = self.dup
separators.each do |s|
str = str.gsub(/(?:#{s}+)([a-z])/){ $1.upcase }
end
case first_letter
when :upper, true
str = str.gsub(/(\A|\s)([a-z])/){ $1 + $2.upcase }
when :lower, false
str = str.gsub(/(\A|\s)([A-Z])/){ $1 + $2.downcase }
end
str
end
end
=begin
Jekyll filter to convert string to camelcase
Usage:
{% 'string' | camelcase %}
=end
module Jekyll
module CamelCase
def camelcase(input)
input.camelize(:lower)
end
end
end
Liquid::Template.register_filter(Jekyll::CamelCase)当筛选字符串时,它是成功的:
{{ 'Page Title' | camelcase }} # pageTitle
在页变量上使用时,不使用...but:
{{ page.title | camelcase }} # Page Title
有什么东西我错过了吗?有人可以试试这个在那里自己安装Jekyll吗?
这不太重要,但它已经困扰我好几个小时了。
谢谢大家。=)
发布于 2016-05-23 08:51:10
问题在于这三条线:
# mainly this one
str = str.gsub(/(?:#{s}+)([a-z])/){ $1.upcase }
# but also these two as well
str = str.gsub(/(\A|\s)([a-z])/){ $1 + $2.upcase }
str = str.gsub(/(\A|\s)([A-Z])/){ $1 + $2.downcase }当我提供字符串Hello World时,正则表达式与空格不匹配,因为它后面跟着大写字母。\s[a-z]与' W'不匹配。因此,使用“速记字字符”(\w)代替。
以下代码起作用:
=begin
# Custom to camelcase function
# Usage:
# 'string'.camelize
# 'string'.camelize(:lower)
=end
class String
def camelize(*separators)
case separators.first
when Symbol, TrueClass, FalseClass, NilClass
first_letter = separators.shift
end
separators = ['_', '\s'] if separators.empty?
str = self.dup
separators.each do |s|
str = str.gsub(/(?:#{s}+)([\w])/){ $1.upcase }
end
case first_letter
when :upper, true
str = str.gsub(/(\A|\s)([\w])/){ $1 + $2.upcase }
when :lower, false
str = str.gsub(/(\A|\s)([\w])/){ $1 + $2.downcase }
end
str
end
end
puts('Hello World'.camelize()) # HelloWorld
puts('Hello World'.camelize(:lower)) # helloWorld
puts('Hello World'.camelize(:upper)) # HelloWorld
puts('hello world'.camelize()) # HelloWorld
puts('hello world'.camelize(:lower)) # helloWorld
puts('hello world'.camelize(:upper)) # HelloWorldhttps://stackoverflow.com/questions/37326071
复制相似问题