我正在寻找一个 JavaScript 正则表达式,它匹配以 # 或 @ 开头的字符串,后跟仅包含一个点/句点(句号)且不含空格的字符串。请注意,点的两侧必须有字符,并且字符串可以包含多个 _ 字符。所以,
"@xxxx.yyyyyy" = match
"@x.yyyyy" = match
"a@xxxxx.yy" = fail because first character not @ or #
"@@xxxxx.yy" = fail because it contains 2 @ characters
"@#xxxxx.yy" = fail because it contains 2 @ of the characters @ or # and should contain only 1
"@xxxxx.yy#" = fail same reason
" @xx yyyyyy" = fail because it contains a space.
"#x_x.y_y" = pass
"@_._" = fail because no a-z chars are present
"@_.y" = fail because no a-z chars present on left of dot.
我相信这里的用例很常见。我正在寻求确定字符串是否包含对 @aaa_aaa_aaaaa.bb_b_bb 形式的变量的有效引用,其中“a”部分表示查询,“b”部分表示列。 @ 是一个前导触发器,用于指示字符串是变量的意图。 '#' 情况具有相同的一般意图,除了 '#' 表示本地化字符串,其中 'a' 部分是主题,'b' 部分是特定字符串。
我绝不是正则表达式专家,并且在使用在线生成器之前就被捕获了,并且误解了一些细微差别。到目前为止,我已经有了这个,但我正在努力将周期限制为只有一个,而且我不知道如何应用负空白规则。
^(@|#)[a-zA-Z.]*
非常感谢任何帮助。
编辑:
感谢您指出我应该说“以 # 或 @ 开头”
点是强制性的。点两侧至少有一个字符。
出现了进一步的用例: - 点的两侧(一侧或两侧)也可能有多个“_”(下划线)字符。示例:“@aa_aaa_a.bb_bb”。
感谢您的回复 - 我认为所有答案都会有效,但我只能将一个答案标记为正确答案,因此我选择了一个答案,并对其他答案投了赞成票。
最佳答案
这就是您所需要的,它将检查开头是否有 @
或 #
,然后匹配 a-zA-Z
code> 或 .
字符并继续检查字母。
var test = [
"@xxxx.yyyyyy",
"@x.yyyyy",
"a@xxxxx.yy",
"@@xxxxx.yy",
"@#xxxxx.yy",
"@xxxxx.yy#",
" @xx yyyyyy",
];
const regex = new RegExp(/^[@#]([a-zA-Z]|\.)*$/i);
console.log(test.map(entry => `${entry}: ${regex.test(entry)}`));
关于javascript - 正则表达式匹配字符串格式为 @ 或 # 后跟点分隔的字符串,不包含空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59236802/