,以配合在JavaScript正则表达式风味的开头和结尾空格的字符串,你可以使用几种选择:
要求第一个与\S
(= [^\s]
)的最后一个非空白字符。这可以用^\S[\S\s]*\S$
来完成。 这个正则表达式需要至少2个字符在字符串中。自从您使用+
以来,您的正则表达式在输入中需要3个字符。它不会允许一些Unicode空格。
您可以使用分组与可选量词(允许0长度匹配的分组)。请参阅^\S(?:\s*\S+)*$
(其中\s
由
替代,因为它是多行演示)。开头的\S
匹配非空白字符,然后是非捕获组,即*
量化(匹配零次或多次出现次数)并匹配0+个空白字符的0+序列,后跟1个非空白字符。 对于像RE2这样的味道来说,这是一个很好的表达方式,它不支持lookaround,但支持量化的组。
您可以使用向前看符号,要求第一个和最后一个字符为非空白字符:^(?=[\S\s]*\S$)\S[\S\s]*$
其中(?=[\s\S]*\S$)
需要的最后一个字符是一个非空白,并先行将要求第一个字符是后\S
非空白。 [\s\S]*
匹配0+任何字符。 这将匹配1个字符串,但不匹配空字符串。
如果你的正则表达式没有前导/尾随空格匹配字符串应该也匹配一个空字符串,使用2个负向前看符号:^(?!\s)(?![\S\s]*\s$)[\S\s]*$
。如果有前导空格,(?!\s)
前瞻将会使比赛失败,如果尾随空格为(?![\S\s]*\s$)
,[\s\S]*
将匹配0+任何字符。 *如果不支持查找,请使用效率低得多的^(?:\S(?: *\S+)*)?$
。
如果您不需要匹配非空白字符之间的任何字符,你可以恢复[\s\S]
您[\S ]
。在PCRE中,可以使用.NET和其他支持Unicode属性的水平空格与\h
匹配,可以使用[\t\p{Zs}]
来匹配任何水平空格。在JS中,[^\S\r\n\f\v\u2028\u2029]
可用于此目的。
注意,一些正则表达式的口味不支持非捕获组,你可以在上面的图案(
全部更换(?:
。
你的意思是*中间的一个词*,真正的中间(一个索引),还是简单地说前后应该有文字? –
在问题本身**中包含相关的“代码”和样本数据**。 – Amit
如果您需要匹配1个字符串,请使用['^(?= \ S)(?=。* \ S $)[\ S] + $'](https://regex101.com/r/pZ0mN3/ 3)。 –