为啥全局修饰符不能正常工作?
Posted
技术标签:
【中文标题】为啥全局修饰符不能正常工作?【英文标题】:Why does global modifier not work properly?为什么全局修饰符不能正常工作? 【发布时间】:2013-11-05 01:39:56 【问题描述】:为什么“g”修饰符在这种情况下不起作用?我认为用逗号分隔变量并添加“g”是将匹配设置为全局匹配的可接受方式?
str = "cabeca";
testcases = [];
x = 0;
for (i = 0; i < str.length; i++)
testcases = str[i];
x = i + 1;
while (x < str.length)
testcases += "" + str[x];
if (str.match((testcases),"g").length >= 2)
console.log(testcases);
x++;
当前演示(仍然无法运行)http://jsfiddle.net/zackarylundquist/NPzfH/
【问题讨论】:
var
var
var
var
var
var
请注意,分配testcases = []
是没有意义的,因为您在使用testcases 之前先执行testcases = str[i]
。您不能在 ECMAScript 中“键入”变量。
【参考方案1】:
您需要定义一个实际的RegExp
对象。
new RegExp(testcases, 'g');
但是请注意,如果您的字符串包含需要以正则表达式模式转义的字符,则可能会导致意外结果。
例如
var s = 'test.',
rx = new RegExp(s);
rx.test('test1'); //true, because . matches almost anything
因此,您必须在输入字符串中对其进行转义。
rx = new RegExp(s.replace(/\./, '\\.'));
rx.test('test1'); //false
rx.test('test.'); //true
【讨论】:
是的,但要注意原始字符串是否包含元字符。 @Pointy 我添加了一些精度。 添加上面的代码会返回 的结果,而不是它应该匹配的字母。 jsfiddle:jsfiddle.net/zackarylundquist/NPzfH【参考方案2】:match()
方法只需要一个参数 - 一个正则表达式对象。要像您尝试使用 RegExp
构造函数一样从字符串构造正则表达式:
testcases = new RegExp(str[i],'g');
那么你可以这样做:
if (str.match(testcases).length >= 2)
console.log(testcases);
【讨论】:
以上是关于为啥全局修饰符不能正常工作?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 swipeActions 修饰符不能直接与 List 容器一起使用? #SwiftUI
java - 为啥在java中可以具有默认修饰符的类不能受到保护