AppleScript"如果包含"

时间:2017-05-04 10:42:22

标签: if-statement applescript contain

我有一个脚本,它会查找名称并搜索与另一个变量的匹配。

如果变量1是"名称演示"它正常工作。变量2是"演示名称"然后脚本找不到匹配项。

set nameMatchTXT to ""
if NameOnDevice contains theName then
    set nameMatch to theName & " : Name Match"
end if

无论如何要改变这个以找到匹配的订单吗? PS脚本正在寻找单词野性名称,有时处理双位字符可能是一个困难。

2 个答案:

答案 0 :(得分:2)

您的要求声明:

  

如果变量1是“名称演示”而变量2是“演示名称”则   脚本找不到匹配。

这将解决这个问题:

set var1 to "Name Demo"
set var2 to "Demo Name"

if (var2 contains (word 1 of var1)) and (var2 contains (word 2 of var1)) then
    -- you have a match
    display dialog "var1 and var2 match"
else
    display dialog "no match"
end if

答案 1 :(得分:1)

您必须对每种情况进行单独检查。还有其他方法(例如复杂的正则表达式),但这是最简单和最可读的。

set nameMatch1 to "Name"
set nameMatch2 to "Demo"
if (NameOnDevice contains nameMatch1) and (NameOnDevice contains nameMatch2) then
    set nameMatch to NameOnDevice & " : Name Match"
end if

如果要添加匹配条件,最终可能会添加更多条件。您可能希望将所有单词放在列表中并检查它,而不是添加更多变量和更多条件。将来,如果您需要添加更多单词,只需将单词添加到列表中即可。我已经将它提取到一个单独的子程序中,以便于阅读:

on name_matches(nameOnDevice)
    set match_words to {"Name", "Demo"}
    repeat with i from 1 to (count match_words)
        if nameOnDevice does not contain item i of match_words then
            return false
        end if
    end repeat
    return true
end name_matches


if name_matches(nameOnDevice) then
    set nameMatch to nameOnDevice & " : Name Match"
end if

澄清后编辑

如果您无法控制匹配的文本(如果它来自外部源,并且您没有编码),则可以将该文本拆分为单词,并将其用作第二个示例中的单词列表。例如:

on name_matches(nameOnDevice, match_text)
    set match_words to words of match_text
    repeat with i from 1 to (count match_words)
        if nameOnDevice does not contain item i of match_words then
            return false
        end if
    end repeat
    return true
end name_matches


if name_matches(nameOnDevice, match_text_from_some_other_source) then
    set nameMatch to nameOnDevice & " : Name Match"
end if