Javascript 正则表达式:搜索字符仍然不完美
我有以下代码:Javascript 正则表达式:搜索字符仍然不完美,javascript,regex,Javascript,Regex,我有以下代码: <script type="text/javascript"> var str="KD-R35H2UND"; var patt1=/[G|T|EE|EJU].*D/i; document.write(str.match(patt1)); </script> 我的问题是:如果我键入KD-R35GD它可以显示GD,但是如果KD-R35D它什么都不能显示..如何使它工作?b*意味着“匹配零次或多次出现的b” 表示“匹配除换行符以外的任何字符” [EE|EJU]
<script type="text/javascript">
var str="KD-R35H2UND";
var patt1=/[G|T|EE|EJU].*D/i;
document.write(str.match(patt1));
</script>
我的问题是:如果我键入KD-R35GD
它可以显示GD
,但是如果KD-R35D
它什么都不能显示..如何使它工作?b*
意味着“匹配零次或多次出现的b
”
表示“匹配除换行符以外的任何字符”
[EE|EJU]
表示“匹配E
、a
、aJ
或aU
”
*
表示“匹配除换行符以外的任何字符零次或多次”
D
表示“匹配aD
”
所以正则表达式正在做你要求它做的事情
根据您在问题中提供的示例,我猜实际规则应该是:
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
字符串的第一部分(KD-R35)是否与要验证的字符串的所有实例相同(或至少格式相同)
你能写一个字符串示例列表和正则表达式匹配后你想要的提取吗
例如:
- KD-R35HASDF=>HASDF
- KD-R35H1234=>H1234
- KD-R35HASDA=>HASDA
- KD-R35HG54G=>HG54G
- KD-R35HD23D=>HD23D
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]+“
”;
document.write(str2.match(patt1)[1]+“
”;
文件写入(str3.match(patt1)[1]+“
”;
文件写入(str4.match(patt1)[1]+“
”;
文件写入(str5.match(patt1)[1]+“
”;
请注意,str5.match(patt1)返回一个数组,因此使用第二个元素如下:
if i type KD-R35ED => SHOW ED
KD-R35UND => UND
KD-R35JD => JD
KD-R35TJD => TJD
KD-R35EED=> EED
str5.match(patt1)[1]
您将得到您要查找的结果
<script type="text/javascript">
var str="KD-R35H2UND";
var patt1=/.{2}-.{3}(.*)/;
document.write(str.match(patt1));
</script>
var str=“KD-R35H2UND”;
var patt1=/.{2}-.{3}(.*)/;
记录(str.match(patt1));
我改为这一部分,但显示了KD-R35H2UND,H2UND您试图用正则表达式做什么-特别是这一部分
[EE|EJU]
-详细说明输入格式和匹配条件,并发布两个接受和拒绝的字符串。@klox:该输出非常适合模式的功能。显然这不是您想要的,所以您需要清楚地告诉正则表达式引擎您想要什么。如果你不能做到这一点,那么你需要清楚地告诉我们你想要什么,这样我们就可以告诉你要告诉引擎什么,你清楚地想要什么。这显然是我想要的。问题仍然不是perfect@all:我已经在更改我的问题,请再次检查并假设您的所有输入不会以KD-R35开头?“因为如果它是/KD-R35(.*)/就是您想要的正则表达式。如果它不总是以KD-R35开头,或者如果有尾随信息,请发布一个数据格式的描述。应该是{2}-.{3}(.*)
,他想要在KD-R35
之后的所有内容。它返回一个数组,你需要使用>str1.match(patt1)[1]我不明白match[0]
包含整个字符串(“KD-R35H2UND”),match[1]
包含变量部分(“H2UND”)。如果前面有KD-R35
,则不可能只匹配H2UND
,因为JavaScript不支持查找断言。毕竟可以工作,我发现了另一个问题..请检查我的问题。。
<script type="text/javascript">
var str="KD-R35H2UND";
var patt1=/.{2}-.{3}(.*)/;
document.write(str.match(patt1));
</script>