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。返回字符串