为什么jquery正则表达式每次返回不同的测试用例
Why jquery regular expression return different - different test cases each time?
当使用正则表达式限制将HTML实体输入文本区域时,我遇到了一个问题。
我使用了这个正则表达式 - /<(.|'n)*?>/g;
限制 HTML 实体,它对我来说工作正常,但是当我声明全局变量并使用此正则表达式时,它每次都会给我不同的 - 不同的测试用例(真/假)。
有一个 Jsfiddle - 试试这个
当您第一次单击"提交"按钮时,您会得到"真",第二次你会得到相同内容的"假"。
谁能告诉我为什么我的正则表达式每次在全局声明时都会返回不同的测试用例?
感谢您的帮助!!
您在正则表达式上使用g
标志。
如果您需要使用 g
,您可以在函数中定义您的正则表达式,以便每次都获得一个新的正则表达式
function CheckContent(){
var RegForRestrictHtmlTags2 = /<(.|'n)*?>/g;
$('#txtJobDesc').val("AAAAAAAA<fff>AAAAAA");
alert(RegForRestrictHtmlTags2.test($('#txtJobDesc').val()));
}
使用 g
标志时,可以使用 .test
在主题字符串中查找多个匹配项。 .test
将继续为每场唯一匹配返回true
。一旦.test
返回 false,它将有效地"重置"到起始位置。
考虑这个简单的例子
> var re = /a/g;
undefined
> var str = 'aaaaab';
undefined
> re.test(str); // first a
true
> re.test(str); // second a
true
> re.test(str); // third a
true
> re.test(str); // fourth a
true
> re.test(str); // fifth a
true
> re.test(str); // no more a's; reset
false
> re.test(str); // back to first a
true
问题是您在RegExp
文字上使用g
标志。解决方案是删除g
标志。
根据RegExp.test()
的文件(强调我的):
与
exec
(或与它结合使用)一样,在同一全局正则表达式实例上多次调用test
将超越前一个匹配项。
在第一次调用test
之后,RegExp
对象/<(.|'n)*?>/g
的lastIndex
属性被更新。用作第二次调用 test
的偏移量的索引。由于模式不再匹配,因此第二次调用返回 false
,lastIndex
重置为 0。您可以看到正则表达式的lastIndex
属性在此 JSFiddle 中正在更改。
删除 g
标志将导致引擎忽略 lastIndex
属性。
我在这篇文章中详细描述了RegExp.exec
的行为(对于RegExp.text
也是如此)。
- angularjs、因果报应和requirejs测试用例错误
- 我们能在&在块到mocha的特定测试用例(it)之后
- 在Karma Jasmine单元测试用例中检查日期格式
- 正在量角器测试用例中从电子邮件中获取值
- 如何将 XML 文件包含在摩卡测试用例中
- 如何将行数计数分配给另一个值,该值稍后可在Protractor中的测试用例中使用
- 如何在启动Mocha测试用例之前添加延迟
- 如何在nightwach中检索当前测试用例名称
- 如何在多个文件中设置摩卡测试用例的执行顺序
- 如何在断言失败时继续测试用例 在 CasperJS 中
- 为什么在我的量角器测试用例中没有定义网络驱动程序
- 猫鼬模型单元测试 - 如果任何测试用例失败,连接将不会关闭
- 如何在量角器 e2e 测试用例失败时发送电子邮件
- 测试用例在 Chrome 中失败
- 如何在摩卡的测试用例中调用另一个测试用例
- 如何处理单元测试用例的q和promise
- ECMAScript 5日期.ISO 8601测试用例的分析结果
- 如何在运行JEST测试用例时将全局变量设置为true
- 如何在jasmine测试用例中模拟$(element).show和ko.mapping.fromJS
- AngularJS-在jasmine测试用例中嘲笑ngTableParams