正则表达式:搜索角色仍然不完美

时间:2010-06-15 10:05:09

标签: javascript regex

我有这段代码:

<script type="text/javascript">
var str="KD-R35H2UND";
var patt1=/[G|T|EE|EJU].*D/i;
document.write(str.match(patt1));
</script>

使用var patt1=...处的代码,我可以这样显示:

if i type KD-R35ED => SHOW ED
KD-R35UND => UND
KD-R35JD => JD
KD-R35TJD => TJD
KD-R35EED=> EED

我的问题是:如果我输入KD-R35GD,它可以显示GD,但如果KD-R35D它无法显示任何内容..如何使其有效?

3 个答案:

答案 0 :(得分:2)

b*表示“匹配b的零个或多个匹配”。

.表示“匹配除换行符之外的任何字符”。

[EE|EJU]表示“匹配E|JU”。

.*表示“匹配除换行符号零或更多次之外的任何字符”。

D表示“匹配D”。

所以正则表达式正在按照你的要求去做。

根据您在问题中提供的示例,我猜测实际的规则应该是:

  1. 字符串以KD-R35开头。
  2. 然后可以跟随任意数量的字母数字字符,只要
  3. 其中有EJU个,
  4. 字符串以D结尾。
  5. 这些规则作为正则表达式,请阅读:

    ^         # start of string
    KD-R35    # literal text
    (         # start of capturing group
      \w*     # any number of alphanumeric characters
      [EJU]   # at least one of E, J, or U
      \w*     # any number of alphanumeric characters
      D       # a D
    )         # end of capturing group
    $         # end of string
    

    或者,在JavaScript中:

    match = subject.match(/^KD-R35(\w*[EJU]\w*D)$/i);
    if (match != null) {  // successful match
        mytext = match[1] // capturing group 1
    } else {
        // Match attempt failed
    }
    

    我假设大写/小写并不重要。

    编辑:嗯,你的新编辑改变了规则。似乎任何字符串都是允许的,只要它以KD-R35开头并以D结尾。在这种情况下,正则表达式只是/^KD-R35(\w*D)$/i

答案 1 :(得分:0)

字符串的第一部分(KD-R35)是否与您要验证的字符串的所有实例相同(或至少是格式)?

你能编写一个字符串示例列表和正则表达式匹配后你想要的提取。

例如:

  • KD-R35HASDF =&gt; HASDF
  • KD-R35H1234 =&gt; H1234
  • KD-R35HASDA =&gt; HASDA
  • KD-R35HG54G =&gt; HG54G
  • KD-R35HD23D =&gt; HD23D

如果是这种情况,这个正则表达式可能会有所帮助:

  

{2} \ - 。{3}(。*)

含义:

  1. 任何角色2次
  2. 减号
  3. 任何角色3次
  4. CAPTURE - 任意次数的任何字符
  5. HTML:

        <script type="text/javascript">
            var str1="KD-R35HASDF";
            var str2="KD-R35H1234";
            var str3="KD-R35HASDA";
            var str4="KD-R35HG54G";
            var str5="KD-R35HD23D";
            var patt1=/.{2}\-.{3}(.*)/;
            document.write(str1.match(patt1)[1] + "<br>");
            document.write(str2.match(patt1)[1] + "<br>");
            document.write(str3.match(patt1)[1] + "<br>");
            document.write(str4.match(patt1)[1] + "<br>");
            document.write(str5.match(patt1)[1] + "<br>");
        </script>
    

    请注意,str5.match(patt1)返回一个数组,因此请使用第二个元素:

      

    str5.match(patt1)[1]

    您将获得正在寻找的结果

答案 2 :(得分:0)

<script type="text/javascript">
var str="KD-R35H2UND";
var patt1=/.{2}-.{3}(.*)/;
document.write(str.match(patt1));
</script>

我改为这一个,但显示KD-R35H2UND,H2UND