我这样设置字符串,
"保存操作将覆盖DB中的[data]。"
我正在验证这种方法,以查找上述字符串是否存在于特定变量中。
var myVar = "The save operation will overwrite [data] in DB;.";
var pattern = /The save operation will overwrite [data] in DB;./;
var exists = pattern.test(myVar);
alert(exists);
为什么即使模式和字符串myVar匹配…exists只在这种情况下返回false ?
I want exists = true if only if pattern string ==' save操作将覆盖[data] in DB; '
对于其余存在的所有情况应为= false。
ex:保存操作将更新/覆盖DB中的[data];也应该返回false。
Exist当且仅当此模式完全匹配时为真。'保存操作将覆盖DB中的[data]; '
我到底在哪里做错了?
您正在使用模式匹配,因此您应该转义特殊字符(http://www.regular-expressions.info/refcharacters.html)。
正确的语法应该是var myVar = "The save operation will overwrite [data] in DB;.";
var pattern = /^The save operation will overwrite [data] in DB;.$/;
var exists = pattern.test(myVar);
alert(exists);
请注意'[',']'和'.'之前的转义字符。此外,插入符号'^'表示该行应该从那里开始,美元符号'$'表示该行应该在那里结束。
如果你想做大小写不变,你可以添加'i'。对于多行,添加'g'
var myVar = "The save operation will overwrite [data] in DB;.";
var pattern = /^The save operation will overwrite [data] in DB;.$/gi;
var exists = pattern.test(myVar);
alert(exists);
您可以使用此站点测试正则表达式。
在这里你根本不需要正则表达式,看看下面三个"匹配"的版本,使用符合你要求的那个:
var myVar = 'The save operation will overwrite [data] in DB;.';
var pattern = 'The save operation will overwrite [data] in DB;.';
var exists = myVar.indexOf(pattern) > -1;
var startsWith = myVar.indexOf(pattern) == 0;
var strictEqual = myVar === pattern;
alert('Exists: ' + exists + 'n' +
'Starts with: ' + startsWith + 'n' +
'Strict equal: ' + strictEqual);