Regex 什么是一个好的正则表达式来匹配一个单词中的可选空格?
数字是可选的,并且只允许出现在单词的末尾Regex 什么是一个好的正则表达式来匹配一个单词中的可选空格?,regex,Regex,数字是可选的,并且只允许出现在单词的末尾 空间是可选的,只允许在单词的中间。 我只是想用一些语言来匹配可能的月份,比如说英语和越南语 例如,以下是有效匹配项: 'June' “tháng 6” 但以下不是因为空格:'June''June' 这是我的测试用例: 正如您所看到的,我提出了^\S[\S]+\S$,这是一种可行的方法,但我想知道是否有更好的方法来实现这一点。要匹配JavaScript正则表达式中没有前导和尾随空格的字符串,可以使用以下几个选项: 要求第一个和最后一个非空白字符带有\S(
空间是可选的,只允许在单词的中间。
我只是想用一些语言来匹配可能的月份,比如说英语和越南语 例如,以下是有效匹配项:'June'
“tháng 6”
但以下不是因为空格:'June'
'June'
这是我的测试用例:
正如您所看到的,我提出了
^\S[\S]+\S$
,这是一种可行的方法,但我想知道是否有更好的方法来实现这一点。要匹配JavaScript正则表达式中没有前导和尾随空格的字符串,可以使用以下几个选项:
- 要求第一个和最后一个非空白字符带有
(=\S
)。这可以用,比如说,[^\S]
来完成此正则表达式要求字符串中至少包含2个字符。由于使用了^\S[\S\S]*\S$
,您的正则表达式需要输入3个字符。它也不允许一些Unicode空白+
- 您可以将分组与可选量词(允许0长度匹配的量词)组合使用。请参阅(其中
替换为\s
,因为它是一个多行演示)。开头的
匹配一个非空白字符,然后是一个非捕获组,即\S
量化(匹配零次或多次出现),并匹配0+个空白字符的0+序列,后跟1+非空白字符对于像RE2这样的口味来说,这是一个很好的表达方式,它们不支持环顾四周,但支持量化组。*
- 您可以使用lookaheads来要求第一个和最后一个字符为非空白字符:
,其中^(?=[\S\S]*\S$)\S[\S]*$
要求最后一个字符为非空白字符,而先行操作后的(?=[\S\S]*\S$)
将要求第一个字符为非空白字符<代码>[\s\s]*匹配0+任何字符这将匹配1个字符字符串,但不会匹配空字符串\S
- 如果要匹配没有前导/尾随空格的字符串的正则表达式也应该匹配空字符串,请使用2个负lookaheads:。如果有前导空格,
前瞻将使匹配失败,(?!\s)
将在尾随空格的情况下执行相同操作,(?![\s]*\s$)
将匹配0+个字符*如果不支持lookarounds,请使用效率低得多的[\s]*
^(?::\S+*)?$
[\s\s]
还原为[\s]
。在PCRE中,水平空白可以与\h
匹配,在.NET和其他支持Unicode属性的程序中,您可以使用[\t\p{Zs}]
匹配任何水平空白。在JS中,[^\S\r\n\f\v\u2028\u2029]
可用于此目的
注意某些正则表达式风格不支持非捕获组,您可以在上述模式中将所有
(?:
替换为(
)。单词中间、真正的中间(一个索引)或只是前后应该有文本是什么意思?包括相关的“代码”和问题本身中的示例数据。如果需要匹配1个字符字符串,请使用。我喜欢@WiktorStribiżew给出的解决方案。您也可以使用
:^(\S+[\S]*\S++$
,这也可以解释1个字符长的字符串。@VladislavMartin:我想您是想写^(\S+[\S]*\S}\S)+$
。否则,回溯就太过分了!