Javascript 字符串变量不接受"&引用;签名

Javascript 字符串变量不接受"&引用;签名,javascript,string,variables,protractor,sign,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变量, 我得到的结果是: 预期['这是我的字

我用以下代码编写代码:

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

        expect(text.match(blabla)).toBe(true);
        console.log(text);
    });
甚至我的控制台的输出也等于我的blabla变量, 我得到的结果是:

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

没有任何“?”标志


怎么可能?

匹配的参数是一个正则表达式,其中
具有特殊含义。您可能是指
toEqual()

expect(element(by.className('charge')).getText()).toEqual("Is this my string?");
如果需要正则表达式匹配,请创建正则表达式对象并使用
toMatch()


请注意,在量角器中,
expect()
被“修补”以隐式解析承诺,您不需要使用
then()
匹配的参数是:

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

所以,不要给它传递字符串。显式地向它传递一个正则表达式对象(因为将字符串转换为正则表达式以及必须处理两级语法才能转义所需的工作量要小得多)

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

var blabla = /Is this my string\?/;
也就是说,如果要匹配整个字符串,只需进行以下测试即可:

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

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

它基本上使用正则表达式返回匹配的组,因此,在本例中

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

expect(text, blabla).toBeEqual();

因此,错误消息非常漂亮;)

提供给
match()
的字符串参数是一个正则表达式,而此上下文中的
表示“匹配之前的零次或一次”。在您的示例中是这样的:-)

您可以通过编写
\?
来明确地回避所提出的问题,在这种情况下,行为将如您所期望的那样


干杯,

@Yte请接受昆汀的回答,因为它比我的回答更详细。很乐意帮忙。
< "Is this my string" === "Is this my string?";
> false
expect(text === blabla).toBe(true);
expect(text, blabla).toBeEqual();