当我使用全局标志和不区分大小写的标志时,这个正则表达式有什么问题?查询是用户生成的输入.结果应该是[true,true].
var query = 'Foo B';
var re = new RegExp(query, 'gi');
var result = [];
result.push(re.test('Foo Bar'));
result.push(re.test('Foo Bar'));
// result will be [true, false]
Run Code Online (Sandbox Code Playgroud)
var reg = /^a$/g;
for(i = 0; i++ < 10;)
console.log(reg.test("a"));Run Code Online (Sandbox Code Playgroud)
var r = /\d/g;
var a = r.test("1"); // will be true
var b = r.test("1"); // will be false
console.log(a == b); // will be false
Run Code Online (Sandbox Code Playgroud)
请向我解释为什么r.test("1")每次通话交替的结果?
通过删除g修饰符,我能够解决我遇到的问题.但是我仍然想知道为什么会这样.
首先,为我糟糕的英语道歉.
我正在尝试测试字符串以匹配模式,所以我写了这个:
var str = 'test';
var pattern = new RegExp('te', 'gi'); // yes, I know that simple 'i' will be good for this
Run Code Online (Sandbox Code Playgroud)
但我有这个意想不到的结果:
>>> pattern.test(str)
true
>>> pattern.test(str)
false
>>> pattern.test(str)
true
Run Code Online (Sandbox Code Playgroud)
有谁能解释一下?
我正在使用用户名的输入字段构造一个表单。我想使用正则表达式将用户名限制在很小的字符范围内,根据用户输入时与正则表达式相比输入的有效性,将文本的颜色从红色更改为绿色。
到目前为止,尽管对正则表达式进行了积极的测试,它仍然没有选择出任何无效的字符。
https://regex101.com/r/XPFy6c/1/
/^[A-Z0-9 -]+$/igm
Run Code Online (Sandbox Code Playgroud)
这是代码,这里是JSFiddle 。
/^[A-Z0-9 -]+$/igm
Run Code Online (Sandbox Code Playgroud)
const form = document.querySelector('form');
const input = document.querySelector('input');
const check = /^[A-Z0-9 -]+$/ig;
form.addEventListener("input", e => {
const checkName = check.test(input.value);
if(!check) {
input.classList.add('invalid-name');
input.classList.remove('valid-name');
} else {
input.classList.add('valid-name');
input.classList.remove('invalid-name');
}
})Run Code Online (Sandbox Code Playgroud)
.invalid-name {
color: red;
}
.valid-name {
color: green;
}Run Code Online (Sandbox Code Playgroud)
更新:尽管此问题已解决,但是如果您尝试使用该代码,则会注意到正则表达式交替为真/假仍然存在问题。这个问题的解决方案在这里。
我想将 URL 主机部分与 JavaScript 中的正则表达式匹配。假设我有一个 URL
var str = 'www.demo-site.com:1234'
Run Code Online (Sandbox Code Playgroud)
我设计了下面的正则表达式来匹配它
var regex = /^www\.demo-site\.com(:\d+)$/gi
Run Code Online (Sandbox Code Playgroud)
正如我所料,regex.test(str)返回true. 但是,如果我再次运行它,它会返回 false。为什么运行完全相同的函数两次的结果不同?
regex.test(str); //returns true
regex.test(str); //returns false
我创建了一个函数来检查输入文本字段是否有效,然后将类名附加到与某些css代码对应的元素,或者如果它有效则不执行任何操作.
function checkInputText(inputType, elem, oldClass, classError) {
var inputT = document.getElementById(elem);
var oldClass = oldClass;
var b = regex[inputType].test(inputT.value)
if (!b) {
inputT.className = classError + ' ' + oldClass;
return false;
} else {
inputT.className = oldClass;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,由于某些未知原因,当函数调用.test()函数时,它会在第一次为事件返回true,但是当您再次尝试它时,它将返回false.