正则表达式测试函数不返回相同的引号
Regex test function do not return the same depending quotes
我在javascript中有一个奇怪的正则表达式:
var re = /[^'s]+(?:'s+|$)/g;
re.test('foo'); // return true
re.test("foo"); // return false
正则表达式类型敏感吗?我的第一个目标是提取字符串的所有单词(由一个或多个空格分隔)。
谢谢你的帮助。
朱利安
当在Javascript正则表达式上使用g
标志时,它将跟踪最后找到匹配的位置,并在下次尝试查找匹配时从该索引开始搜索。
在两个re.test()
呼叫之间,看看re.lastIndex
,看看我在说什么。
var re = /[^'s]+(?:'s+|$)/g;
re.test('foo'); // return true
re.lastIndex; // 3
re.test("foo"); // return false
您将注意到您使用的引号类型无关紧要,re.test('foo'); re.test('foo');
将具有相同的行为。
如果您希望regex重新开始,您可以从regex中删除全局标志,或者在每次尝试找到匹配后将re.lastIndex
设置为0
,例如:
var re = /[^'s]+(?:'s+|$)/g;
re.test('foo'); // return true
re.lastIndex = 0;
re.test("foo"); // return true
Blender在注释中注意到的交替可以解释,因为当匹配失败时,lastIndex
被自动设置为0
,因此失败后的下一次尝试将成功。
相关文章:
- 为什么当我在数组上测试regex时,它会返回false
- 无法从量角器测试中元素的值返回字符串
- Mocha/Chai测试链接到函数返回断言错误
- Mocha测试框架的test.describe返回值
- angular payments返回带有测试数据的无效卡
- NodeJS”;进行测试”;返回一个Permission denied
- 测试Ember.JS应用程序失败,返回ReferenceError:未定义Ember
- CasperJS测试获胜't执行后返回
- Jasmine spyOn使用伪造的返回数组测试功能
- 为什么当一切都通过时,超级测试会返回错误
- 没有返回类型的函数的Javascript单元测试
- 如何使用在 AngularJS 中返回承诺的$resource测试工厂
- Jasmine:测试返回的承诺是一个具体的例外
- NodeJS + QUNIT:在测试中保存返回的异常
- 我应该测试返回的对象作为一个整体还是单独测试其属性
- 在测试之前,需要量角器等待服务返回
- 使用 Jasmine 2.4.* 测试返回承诺的服务
- 简单的短 JQuery 和 DataFetch 测试返回错误
- 正则表达式测试算法返回 false
- 咖啡脚本相当于 () => { 返回测试() }