Javascript 如何为ex#u date(ddsf#dsd)编写正则表达式?

Javascript 如何为ex#u date(ddsf#dsd)编写正则表达式?,javascript,regex,Javascript,Regex,当#-符号位于两个字符串之间时,正则表达式模式应接受该字符串。假设ex#date(ds23d#d4ff5)应该接受字符串,但是,如果字符串是ex#date(asa#ss32as,#,s3ds#sdsd)?在这种情况下,它不应该接受字符串 我试过这个图案 /(([a-z0-9]#[a-z0-9]+(\s|\)|\,|$)))/ 它应该期望ex#u date(d23sd#df32f)而不是ex#u date(as3a#ss4as,#,sd24s#sd56sd),因为中间的#符号单独表示#前后没有字

当#-符号位于两个字符串之间时,正则表达式模式应接受该字符串。假设
ex#date(ds23d#d4ff5)
应该接受字符串,但是,如果字符串是
ex#date(asa#ss32as,#,s3ds#sdsd)
?在这种情况下,它不应该接受字符串

我试过这个图案

/(([a-z0-9]#[a-z0-9]+(\s|\)|\,|$)))/
它应该期望
ex#u date(d23sd#df32f)
而不是
ex#u date(as3a#ss4as,#,sd24s#sd56sd)
,因为中间的#符号单独表示#前后没有字母数字字符

规则:

如果字符串#-符号中存在任何位置,则仅当

  • 如果#-符号后面跟有像-#12这样的数字
  • 如果#-符号不是像#、(#)、[#]、#这样单独出现的
  • 如果#-符号后面只跟字符-'dt'类似-#dt或#dt或#dt或#dt
  • 如果#-符号位于任意两个字母数字字符之间,如w3e#ere,221#we4,er#rr,12#21
  • 如果在#-符号之前只存在字母数字字符,则表示ew1#,ge#,12#

没有任何#-符号字符串是有效的,除非并且直到它不包含像(ROW,UROW和COL)这样的单词,比如-ROW1,UROW,urow12,ROW,col1 col323这些都是无效的字符串。

假设
ex#u date(ds23d#d4ff5)
是一个应该匹配的完整示例,我将正则表达式表述为:

ex_date\(\s*[a-z0-9]+#[a-z0-9]+\s*\)

我们可以使用两种环视设计一些表达式:

  • 您希望在字符串中看到的内容(使用交替和正向前瞻):

  • 以及您不希望在字符串中看到的内容(使用交替和负前瞻):

然后,我们将简单地结合这些:

^(?=^.*[a-z]#[a-z].*$|^.*\b[a-z0-9][a-z]#[a-z][a-z0-9]\b.*$)(?!.*[0-9]#[0-9]|.*[a-z]#[0-9]|.*[0-9]#[a-z]|.*[\s,^]#[\s,^]).*$
唯一的问题是我不确定这些规则,你可以随意修改这些规则



如果您希望探索/简化/修改该表达式,可以在的右上面板上对其进行解释。在中,您可以观察它与一些示例输入的匹配情况,如果您愿意。

您可以使用负前瞻断言右侧的不是被非a-z或0-9包围的

^(?!.*(?:^|[^a-z0-9])#)(?!.*#(?:$|[^a-z0-9])).+$

const regex=/^(?。*(?:^.[^a-z0-9]))(?!.*(?:$.[^a-z0-9]))+$/;
[
“交货日期(ds23d#d4ff5)”,
“出厂日期(asa#ss32as,#,s3ds#sdsd)”,
“ex#u date12(asa#ss32as,#,s3ds#sdsd)”,
“(asa#ss32as、a#b、s3ds#sdsd)”,
“日期(asa#ss32as,#,s3ds#sdsd,a#b)”,
“出厂日期(asa#ss32as,a#b,s3ds#sdsd,4#5)”,
“母羊#母羊”,
“我们,呃,呃,
“p#u价格(we#ee)”,
“p#u date(we#rer,)”,
“p#u car(df#e,)”,
“re#ee,erer#r,”,
“#wewqwq”,
“ddf$%^ gfg^h”,

].forEach(s=>console.log(regex.test)+“=>”+s))但它也接受ex#U日期(ds23d#d4ff5,we#),这是不正确的。这里我只举了一个例子,ex#u date函数可能不包含任何参数,而且字符串也可能只是wew12#wew而没有任何函数。@RahulNigam。我正在探索我的问题,以便您能够更好地理解-我想要一个接受-1的模式。如果字符串中存在任何#-符号,那么字符串只能接受when-a.If#-符号后面跟一个数字,比如-#12。b、 如果#-符号不是像#、(#)、[#]、#这样单独出现的。c、 如果#-符号后面只跟字符-'dt'类似-#dt或#dt或#dt或#dt。d、 如果#-符号位于任意两个字母数字字符之间,如w3e#ere,221#we4,er#rr,12#21.e.如果在#-符号之前只存在字母数字字符,那么就说ew1#,ge#,12#。f、 没有任何#-符号字符串是有效的,除非它不包含像(ROW,UROW和COL)这样的词,比如-ROW1,UROW,urow12,ROW,col1 col323这些是无效的字符串。@Oliver Hao,你能告诉我如何编写一个只有在#-symbol only no接受之后才接受的模式吗#-符号可能存在很多时间,然后所有地方的#在没有意愿之后,只有有效的其他智慧无效。假设#12,#4545454,p(#34),d(#343,)都是有效的,但p(#12,#er),ol(#212er,#2332#445,#we23所有这些都是无效的。我通过改变regex模式进行了测试和尝试,但没有得到我想要的。如果字符串中包含任何数量的#-符号,并且在#符号之前和之后,如果它包含字母数字,那么它就是有效字符串,否则就不是。在js脚本语言中,你能告诉我如何编写满足所有有效案例的模式吗?regex101.com/r/UdZKmE/1在这个regex模式中,它接受所有案例除了一个你可以告诉什么需要修改,以便它可以接受这种情况了。当#-符号不在两个字母数字字符之间时,在这种情况下,在#之后只有数字和字符DT有效,而不是像wew212一样的字母数字,12we#121ew有效,但是#12we,#we12,rate(#we12)是无效的,因为在#之后,它包含数字和字符实际上它会阻止我几天这就是为什么不能提出新问题是的,它工作,但不接受所有标准-让我们在下面的例子中说点-1,4,6,7,9,10,11,12是有效的,除了所有都是无效的,所以我想要一个这样的模式。1.1.Exu日期(ds23d(D4)fff5)2.1.1.Exu日期(asa(asa)作为,作为,作为,ţ,s3d(SDSDSDS)3.3.3.3.3.日期3.3.日期12(asa(作为,作为,作为,作为,作为,a,a,a,b,b,S3D(SDD)SDD)3.3.3.3.3.3.3.日期12(作为)3.3.3.3.3.日期12(asa(作为,作为(作为,作为,作为,作为,作为,作为,作为,作为,作为,作为,作为,作为,作为,作为,作为,作为,作为,作为,作为,作为,作为,作为,作为,作为,作为,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,S,b,s3ds#sdsd,4#5#7#ewe#ewe#ewe 8#we#ere#er3e#9#p#u price#we#ee#10#p#u date#we#rer#11#p#car,在上面的正则表达式模式中,它也接受#wewqwq,ddf$%^#gfg^h,这是错误的。就我给你举个例子,我想要一个接受上述标准的模式,让我再次告诉我的问题,我想要一个接受-1的模式。如果字符串中的任何位置存在#-symbol,那么字符串只有在-a时才可接受。如果#-symbol后面跟数字,比如-#12b。如果#-symbol单独存在,那么单独存在,比如#、(#)、[#]c.如果#-sy
^(?=^.*[a-z]#[a-z].*$|^.*\b[a-z0-9][a-z]#[a-z][a-z0-9]\b.*$)(?!.*[0-9]#[0-9]|.*[a-z]#[0-9]|.*[0-9]#[a-z]|.*[\s,^]#[\s,^]).*$
^(?!.*(?:^|[^a-z0-9])#)(?!.*#(?:$|[^a-z0-9])).+$