我有这段代码:
<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
它无法显示任何内容..如何使其有效?
答案 0 :(得分:2)
b*
表示“匹配b
的零个或多个匹配”。
.
表示“匹配除换行符之外的任何字符”。
[EE|EJU]
表示“匹配E
,|
,J
或U
”。
.*
表示“匹配除换行符号零或更多次之外的任何字符”。
D
表示“匹配D
”。
所以正则表达式正在按照你的要求去做。
根据您在问题中提供的示例,我猜测实际的规则应该是:
KD-R35
开头。E
,J
或U
个,D
结尾。这些规则作为正则表达式,请阅读:
^ # 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)是否与您要验证的字符串的所有实例相同(或至少是格式)?
你能编写一个字符串示例列表和正则表达式匹配后你想要的提取。
例如:
如果是这种情况,这个正则表达式可能会有所帮助:
{2} \ - 。{3}(。*)
含义:
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