我是RegExp的新手。我有一个句子,我想抽出一个满足以下条件的单词-1.它只能包含一个大写字母1.只能由字符/字母组成,不能包含数字例如-“appLe”、“warDrobe”、“hUsh”不适合的单词-“sf_dsfsdF”,“331 ffsF”,“Leopard 1997”,“mister_Ram”等等。您将如何解决此问题?
omqzjyyz1#
下面的正则表达式应该可以工作:
\b(?=[A-Z])[A-Z][a-z]*\b|\b(?=[a-z])[a-z]+[A-Z][a-z]*\b
appLe hUsh Harry suSan I
HarrY - has TWO capital letters warDrobeD - has TWO capital letters sf_dsfsdF - has SPECIAL characters 331ffsF - has NUMBERS Leopd1997 - has NUMBERS mistram - does not have a CAPITAL LETTER
观看实际操作here
如果大写字母为OPTIONAL-则需要在每个[A-Z]后面添加一个?,如下所示:
[A-Z]
?
\b(?=[A-Z])[A-Z]?[a-z]*\b|\b(?=[a-z])[a-z]+[A-Z]?[a-z]*\b
4c8rllxm2#
您可以使用字符集([a-z] & [A-Z])和适当的量词(使用?表示一个或零个大写字母)来实现这一点,字符集包含在要捕获的()中,并由断词符\b包围。如果大写字母是可选的,并且可以出现在任何位置,请用途:
[a-z]
()
\b
/\b([a-z]*[A-Z]?[a-z]*)\b/ //will still match empty string check for length
如果你总是想让一个大写字母出现在任何地方,用途:
/\b([a-z]*[A-Z][a-z]*)\b/ // does not match empty string
如果您总是希望一个大写字母不能是第一个或最后一个字符,请使用用途:
/\b([a-z]+[A-Z][a-z]+)\b/ // does not match empty string
下面是一个工作代码片段,演示了JavaScript中的第二个正则表达式:
const exp = /\b([a-z]*[A-Z][a-z]*)\b/ const strings = ["appLe", "warDrobe", "hUsh", "sf_dsfsdF", "331ffsF", "Leopard1997", "mister_Ram", ""]; for (const str of strings) { console.log(str, exp.test(str)) }
Regex101非常适合开发和测试!
bqujaahr3#
正则表达式:
/\b[a-z\-]*[A-Z][a-z\-]*\b/g
示范:
RegEx101
说明
| 区段|项目名称|| - -|- -||
\b[a-z\-]*
|找到非单词与单词相邻的点([A-Za-z0-9\-]或\w),然后匹配零个或多个小写字母和连字符(注意,连字符需要转义(\-))||
[A-Za-z0-9\-]
\w
\-
|查找单个大写字母||
[a-z\-]*\b
|匹配零个或多个小写字母和连字符,然后查找非单词与单词相邻的点|
3条答案
按热度按时间omqzjyyz1#
下面的正则表达式应该可以工作:
匹配项:
拒绝
观看实际操作here
注:
如果大写字母为OPTIONAL-则需要在每个
[A-Z]
后面添加一个?
,如下所示:4c8rllxm2#
您可以使用字符集(
[a-z]
&[A-Z]
)和适当的量词(使用?
表示一个或零个大写字母)来实现这一点,字符集包含在要捕获的()
中,并由断词符\b
包围。如果大写字母是可选的,并且可以出现在任何位置,请用途:如果你总是想让一个大写字母出现在任何地方,用途:
如果您总是希望一个大写字母不能是第一个或最后一个字符,请使用用途:
下面是一个工作代码片段,演示了JavaScript中的第二个正则表达式:
Regex101非常适合开发和测试!
bqujaahr3#
正则表达式:
示范:
RegEx101
说明
| 区段|项目名称|
| - -|- -|
|
|找到非单词与单词相邻的点(
[A-Za-z0-9\-]
或\w
),然后匹配零个或多个小写字母和连字符(注意,连字符需要转义(\-
))||
|查找单个大写字母|
|
|匹配零个或多个小写字母和连字符,然后查找非单词与单词相邻的点|