正则表达式匹配JavaScript中字符串的全部或初始部分

时间:2014-09-15 03:28:30

标签: javascript regex string

我试图找出一个正则表达式,它符合以下标准。

我要匹配的字符串

 var txt = "This is Regex";

用户可以输入以下内容

  1. “此” - 有效
  2. “Th” - 有效
  3. “这是”--Valid
  4. “这是Reg” - 有效
  5. “这是正则表达式” - 有效
  6. “Tis” - InValid
  7. “是” - InValid
  8. “Reg” - InValid
  9. 因此,用户可以输入部分文字或全文。 如果用户输入部分文本,则应验证序列,如果它不与txt序列匹配,则其无效。

    我正在寻找使用jQuery的解决方案,但即使是普通的JavaScript也很好。

    为了澄清我的要求,我给了7个以上的senarios,它不仅仅是用户可以输入7以上(例如: - 如果用户输入“T”,那么它是有效的,因为它是第一个字符并且如果用户仅输入“H”无效,因为它没有被“T”

    所取代

3 个答案:

答案 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 

ES6&#39; s 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)?)?$