【问题标题】:protractor: comparing strings with greater than Jasmine matcher量角器:比较大于 Jasmine 匹配器的字符串
【发布时间】:2015-08-19 02:32:32
【问题描述】:

我正在尝试比较:

string1 = 'client 90 llc'

string2 = 'client 501 llc'

使用:

expect(client[i]).toBeGreaterThan(client[i-1]);

失败是因为比较函数认为 90 大于 501,我假设是因为它在逐个字符进行比较。有没有办法让它比较整数?因为 web 应用程序在 string1 之后列出了 string2,因为 501 大于 90。

更新:这些字符串没有特定的格式。可以是

'client abc'
'client 90 llc'
'client 501 llc'
'abcclient'
'client111'
'client 22'
'33client'

【问题讨论】:

  • 根据您的最新更新,您想比较什么?它是一个字符串中的一个数字吗?

标签: jasmine protractor


【解决方案1】:

如果您知道字符串的格式,则可以借助Regular Expressions 提取值。在你的情况下,你想在字符串中间提取一个不同的数字,它有共同的部分。以下正则表达式可能有效:

/^client (\d+) llc$/
  • ^ - 字符串的开头
  • () - 捕获特定的字符组
  • \d - 代表一个数字(0-9),反斜杠是必须的,因为它是一个字符序列,不能匹配一个字母d
  • + - 字符可能出现 1 次或多次
  • $ - 字符串结束

因此,我们将能够在字符串中间找到一组数字。您可以创建一个实用函数来提取值:

function extractNumber(string) {
    var pattern = /^client (\d+) llc$/;
    var match = string.match(pattern);
    if (match !== null) {
        // return the value of a group (\d+) and convert it to number
        return Number(match[1]); 
        // match[0] - holds a match of entire pattern
    }
    return null; // unable to extract a number
}

并在测试中使用它:

var number1 = extractNumber(string1); // 90
var number2 = extractNumber(string2); // 501
expect(number1).toBeGreaterThan(number2);

【讨论】:

    【解决方案2】:

    是的,Jasmine 进行了基于角色的比较。一种方法是将字符串分成几部分,然后仅比较数字,如下所示 -

    string1 = 'client 90 llc';
    string2 = 'client 501 llc';
    var newString1 = parseInt(string1.substring(string1.indexOf(' '), string1.lastIndexOf(' ')));
    var newString2 = parseInt(string2.substring(string2.indexOf(' '), string2.lastIndexOf(' ')));
    expect(newString2).toBeGreaterThan(newString1); //501 > 90 - should return true
    

    我假设您的字符串模式将与您在 sn-p 中提到的相同。或者您可以使用正则表达式代替 substring() 函数并获取结果。希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-03-30
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 2016-03-31
      相关资源
      最近更新 更多