Javascript 正则表达式匹配:字符串开头不包含字符

Javascript 正则表达式匹配:字符串开头不包含字符,javascript,regex,regex-negation,Javascript,Regex,Regex Negation,抽象问题: <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#

抽象问题

<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
匹配不以“char”开头的字符串并返回匹配项

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

/(){1}([^#]*)(){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
#测试//不匹配
测试//匹配+返回“测试”
te#st//不匹配
但应该这样做

<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
#测试//不匹配
测试//匹配+返回测试
te#st//匹配+返回te#st
加上返回片段(即标记之间的组='test',例如由'$2')

问题示例: 试试这个

<XX>(?!#)(.*)<\/XX>
(?!)(*)
而不是:

(<XX>){1}([^#]*)(<\/XX>){1}
(){1}([^#]*)(){1}
您可以在中查看更新的正则表达式

亮点:

  • (?!#)
    是一种消极的前瞻,而不是
  • “Fragment”非常一般:所以我对
    (在
    (.*)
    中)没有任何假设
  • 我删除了原始正则表达式中的第一个和最后一个捕获组(即分别将
    ()
    ()
    替换为
    )。如果您不需要捕获组,请不要使用它们
  • 我从原始正则表达式中删除了显式量词
    {1}
    。这两种情况都是不必要的

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

/(<XX>)([^#].*)(<\/XX>)/ig
/()([^#].*)()/ig
以下正则表达式:

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

也允许使用空

的情况,您使用的是什么语言?javascript,但这并不重要。您的要求是“匹配不包含字符的字符串”,即您尝试匹配的字符?1<代码>字符串不包含匹配项2。返回
字符串