2014-12-29 248 views
-2

抽象问题的开头字符:正则表达式匹配:不包含在一个字符串

匹配字符串不与“炭”启动和恢复比赛。

我正则表达式(不完美):

/(<XX>){1}([^#]*)(<\/XX>){1}/ig 

确实

<XX>#test</XX> // not matched 
<XX>test</XX> // matched + return 'test' 
<XX>te#st</XX> // not matched 

但应该做

<XX>#test</XX> // not matched 
<XX>test</XX> // matched + return test 
<XX>te#st</XX> // matched + return te#st 

返回片段(即,标签之间的组='测试',例如'$ 2')。

问题例如https://www.regex101.com/r/vT9kS7/1

+2

你在做什么语言? – ryekayo

+0

javascript,但没关系 – ziom

+0

您的要求是“匹配不包含字符的字符串”,是您尝试匹配的字符数? – TWhite

回答

2

尝试,而不是这个

<XX>(?!#)(.*)<\/XX> 

(<XX>){1}([^#]*)(<\/XX>){1} 

您可以在fork of your fiddle检查出更新的正则表达式。

亮点:

  • (?!#)是负前瞻 - #
  • “碎片”非常普遍:所以我没有采用.(在(.*))。
  • 我丢弃了原始正则表达式中的第一个和最后一个捕获组(即分别用(<XX>)(<\/XX>)分别替换为<XX><\/XX>)。如果您不需要捕获组,请不要使用它们。
  • 我从原来的正则表达式中删除了显式量词{1}。这两个实例都是不必要的。
0

根据你的描述和测试用例,以下工作:

/(<XX>)([^#].*)(<\/XX>)/ig 

以下的正则表达式:

/(<XX>)([^#].*|)(<\/XX>)/ig 

也将使空<XX></XX>的情况。

相关问题