量角器:比较字符串大于Jasmine匹配器

时间:2015-08-18 17:45:07

标签: jasmine protractor

我试图比较:

string1 =' client 90 llc'

string2 =' client 501 llc'

使用:

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

FAILS因为比较函数认为90大于501,所以我假设因为它通过字符比较来做字符。有没有办法比较整数?因为web1应用程序列出了string1之后的string2,因为501大于90。

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

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

2 个答案:

答案 0 :(得分:2)

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

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

结果,我们能够在字符串的中间找到一组数字。您可以创建一个实用程序函数来提取值:

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);

答案 1 :(得分:1)

是的,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

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