如果字符串包含或以结尾,SASS中有什么方法可以做到?

如果字符串包含或以结尾,SASS中有什么方法可以做到?,sass,Sass,我需要sass中的if语句,如so: @each $name, $char in $font-icons { @if ($name ends with "-outline") { //do something } } 有什么方法可以做到这一点吗?不完全是您想要的,但我认为它与Sass尽可能接近 使用str索引($string,$substring)可以发现$name是否包含-outline: @每个$name,$char字体图标{ @if(str索引($name

我需要sass中的if语句,如so:

@each $name, $char in $font-icons {
    @if ($name ends with "-outline") {
        //do something
    }
}

有什么方法可以做到这一点吗?

不完全是您想要的,但我认为它与Sass尽可能接近

使用
str索引($string,$substring)
可以发现
$name
是否包含
-outline

@每个$name,$char字体图标{
@if(str索引($name,'-outline')){
//做点什么
}
}
编辑:刚刚编写了一个快速Sass函数,以实际查明字符串是否以另一个字符串结尾:

@函数以($string,$find)结尾{
@如果(str索引($string,$find)==(str长度($string)-str长度($find)+1)){
@返回true;
}@else{
@返回false;
}
}
@每个$name,$char的$font图标{
@if(以($name,'-outline')结尾){
//做点什么
}
}
更新#2:如果
$string
多次包含
$find
,上述函数将返回false。如果
$string
$find
结尾,则此函数将返回true:

@函数以($string,$find)结尾{
@if(str slice($string,(str length($string)-str length($find)+1))==$find){
@返回true;
}@else{
@返回false;
}
}
更新#3:简化:

@函数以($string,$find)结尾{
@返回str切片($string,(str长度($string)-str长度($find)+1))=$find;
}
请尝试以下内容:

这是为了达到以下目的:

注意,海蛞蝓与我们的
@不匹配。如果
,硬编码的“4”是我们的搜索条件(-slug)-1的长度


您可以在

测试您的sass,因为我只是在搜索它,我将添加以下选项:
index($list,$value)
返回一个
int
(基于1的索引)或
null
表示它可以在布尔上下文中使用

下面是一个很好的用例:

@mixin flexbox($args:'') {
    @if index($args, 'inline') {
        display: inline-flex;
    } @else {
        display: flex;
    }

    @if index($args, 'bar') == null {
        /* style if 'bar' ISN'T passed */
    }
}

.foo {
    @include flexbox(inline);
}
您可以创建令人愉快的复杂的mixin和for循环,使用单个字符串的空格连接关键字代替映射。(想想浏览器如何处理
背景:红色url(image.png)无重复中心;

使用此SCSS代码:

@function str-ends-with($string, $find) {
    @return str-length($string) >= str-length($find) AND str-slice($string, (str-length($string) - str-length($find) + 1)) == $find;
}

这是做这件事的唯一方法

    @if (str-index($name, "-outline")!=null) {
      #{$name}{
        background-color:$char;
      }
        //do something
    }
}
str index($name,“-outline”)
返回$string(
$name
)中$substring(
-outline
)的第一个索引,如果
$name
不包含
-outline

UPDATE,如果$string的长度,则
null
。我添加了一个解决此错误的答案。
@mixin flexbox($args:'') {
    @if index($args, 'inline') {
        display: inline-flex;
    } @else {
        display: flex;
    }

    @if index($args, 'bar') == null {
        /* style if 'bar' ISN'T passed */
    }
}

.foo {
    @include flexbox(inline);
}
@function str-ends-with($string, $find) {
    @return str-length($string) >= str-length($find) AND str-slice($string, (str-length($string) - str-length($find) + 1)) == $find;
}
    @if (str-index($name, "-outline")!=null) {
      #{$name}{
        background-color:$char;
      }
        //do something
    }
}