我试图比较:
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'
答案 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()函数并获取结果。希望这会有所帮助。