我试图找出一个正则表达式,它符合以下标准。
我要匹配的字符串
var txt = "This is Regex";
用户可以输入以下内容
因此,用户可以输入部分文字或全文。
如果用户输入部分文本,则应验证序列,如果它不与txt
序列匹配,则其无效。
我正在寻找使用jQuery的解决方案,但即使是普通的JavaScript也很好。
为了澄清我的要求,我给了7个以上的senarios,它不仅仅是用户可以输入7以上(例如: - 如果用户输入“T”,那么它是有效的,因为它是第一个字符并且如果用户仅输入“H”无效,因为它没有被“T”
所取代答案 0 :(得分:3)
不需要正则表达式,甚至不需要jQuery - 只需测试并查看用户输入的内容是否为文本的子字符串:
function isMatch(userTxt) {
return txt.indexOf(userTxt) != -1;
}
(如果用户文本不存在于字符串中,则调用indexOf
将返回-1,因为子字符串不存在于字符串中。)
如果用户输入的字符串必须从txt
的开头开始,您可以更明确地检查返回的索引是否正好为0:
function isMatch(userTxt) {
return txt.indexOf(userTxt) == 0;
}
答案 1 :(得分:2)
您正在寻找的是txt.substring(0, subtxt.length) === subtxt
。换句话说,搜索字符串subtxt
是否与txt
字符串的开头匹配。
function match(txt, subtxt) {
return txt.substring(0, subtxt.length) === subtxt;
}
<强>测试强>
> txt = "This is Regex";
> ["This", "Th", "This is", "This is Reg", "This is Regex", "Tis", "is", "Reg"]
.forEach(function(sub) {
console.log('"'+sub+'"', "--", match(txt, sub) ? "Valid" : "InValid");
})
"This" -- Valid
"Th" -- Valid
"This is" -- Valid
"This is Reg" -- Valid
"This is Regex" -- Valid
"Tis" -- InValid
"is" -- InValid
"Reg" -- InValid
startsWith
在ES6中,您可以使用新的String#startsWith方法。
在上页中给出的填充中,他们建议使用indexOf
,如
function match(txt, subtxt) {
return !txt.indexOf(subtxt);
}
实际上,它似乎比提取字符串的前导部分并进行完整的字符串比较更快。
如果由于某种原因你真的想用regexp来做,那就试试
var regexp = /^T(h(i(s( (i(s( (R(e(g(e(x)?)?)?)?)?)?)?)?)?)?)?)?$/
这个正则表达式可以&#34;朗读&#34;如
首先是一个&#39; T&#39;然后是什么都没有或者是&#39; h&#39;其次是什么都没有或者是&#39; i&#39;其次是什么都没有或者是&#39;然后是....&#34;。
你明白了。
function match1(subtxt) {
return regexp.test(subtxt);
}
<强>测试强>
> ["This", "Th", "This is", "This is Reg", "This is Regex", "Tis", "is", "Reg"]
.forEach(function(sub) {
console.log('"'+sub+'"', "--", match1(sub) ? "Valid" : "InValid");
})
"This" -- Valid
"Th" -- Valid
"This is" -- Valid
"This is Reg" -- Valid
"This is Regex" -- Valid
"Tis" -- InValid
"is" -- InValid
"Reg" -- InValid
如果你想自动将你的字符串变成一个你想要的行为的正则表达式,虽然这看起来毫无意义,你可以做到
function make_regexp(str) {
function _make_regexp(str) {
return str && str[0] + "(" + _make_regexp(str.slice(1)) + ")?";
}
return RegExp("^" + _make_regexp(str) + "$");
}
> make_regexp("This is Regex")
/^T(h(i(s( (i(s( (R(e(g(e(x()?)?)?)?)?)?)?)?)?)?)?)?)?$/
答案 2 :(得分:0)
试试这个
^Th(?:is is Reg(?:ex)?|is(?: is)?)?$