字符串变量不接受“?”标志

时间:2015-05-11 12:10:20

标签: javascript string variables protractor sign

我用以下代码制作代码:

element(by.className('charge')).getText()
    .then(function(text){
        var blabla = "Is this my string?";

        expect(text.match(blabla)).toBe(true);
        console.log(text);
    });

甚至我的控制台的输出等于我的blabla变量, 我得到了结果:

  

预期['这是我的字符串']是真的。

没有任何“?”登录。

怎么可能?

4 个答案:

答案 0 :(得分:5)

match的论点是:

  

正则表达式对象。如果传递了非RegExp对象obj,则使用新的RegExp(obj)将其隐式转换为RegExp。

所以不要传递一个字符串。明确地将它传递给一个正则表达式对象(因为这会将字符串转换为正则表达式并且必须处理两级语法以逃避通过时更少的痛苦。)

正则表达式将?视为特殊字符(在代码的上下文中,它表示“g应该出现0或1次”。如果要匹配,则需要转义问号它们。

var blabla = /Is this my string\?/;

那就是说,如果你想匹配整个字符串,那就更容易进行测试:

var blabla = "Is this my string?";
expect(text).toBe(blabla);

答案 1 :(得分:3)

match的参数是正则表达式,其中?具有特殊含义。你的意思可能是toEqual()

expect(element(by.className('charge')).getText()).toEqual("Is this my string?");

如果要进行正则表达式匹配,请创建正则表达式对象并使用toMatch()

var blabla = /Is this my string\?/;
expect(element(by.className('charge')).getText()).toMatch(blabla);

请注意,在量角器expect()中,“修补”以隐式解决承诺,您无需使用then()

答案 2 :(得分:1)

你可能误解了match方法在JS字符串中的作用:

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/match

它基本上会使用正则表达式来返回匹配的组,因此,在这种情况下

< ("Is this my string").match("Is this my string?");
> ["Is this my string"]

答案是对的。你想要做的只是比较字符串,只需:

< "Is this my string" === "Is this my string?";
> false

请注意,它与您正在使用的测试引擎(我不知道)无关,这可能是比

更好的方法。
expect(text === blabla).toBe(true);

东西

expect(text, blabla).toBeEqual();

所以错误信息很漂亮;)

答案 3 :(得分:0)

提供给match()的字符串参数是正则表达式,此上下文中的?表示“匹配前一个零或一次”。它在你的例子中做了什么: - )

您可以通过编写\?显式转义问题,在这种情况下,行为将如您所愿。

干杯,