如何限制正则表达式中的字符范围?

sas*_*asi 7 javascript regex node.js

可以说,

let sentence= "Dear user {#val#}{#val#} thanks"
Run Code Online (Sandbox Code Playgroud)

{#val#} 是上句中的动态值。此处代替 {#val#},可以有任何值,但至少可以有 0 和最多 5 个字符。所以我将 {#val#} 替换为 .{0,5} 。除了 {#val#} 部分,我不需要考虑空格,所以我形成的正则表达式是,

let regex =  /^Dear\s*user\s*.{0,5}.{0,5} thanks$/i
let customermsg = "Dear user 1 2 thanks" //Should be valid
let customermsg1 = "Dear user 12345 6789 thanks" //Should be valid
let customermsg2 = "Dear user 123 5 6789 thanks" //Should be valid because space can also be considered as a character and for fist .{0,5} => 123 5 and for second .{0,5} => 6789
let customermsg3 = "Dear user 1 thanks" //Should pass 
let customermsg4 = "Dea r user 1 tha nks" // Should Pass since spaces are not considered in the static portion.
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用下面的测试时,

 regex.test(customermsg)
Run Code Online (Sandbox Code Playgroud)

恰恰相反。即使我已经尝试过以下,

let splitters=/{\\#val\\#}|((\\s\*))/gi;
sentence = sentence.replace(splitters, (x, y) => y ? y : ".(\\S{0,5})"); 
Run Code Online (Sandbox Code Playgroud)

这将返回正则表达式,

 /^Dear\s*user\s*.(\S{0,5}).(\S{0,5})\s*thanks$/
Run Code Online (Sandbox Code Playgroud)

但这也没有按预期工作。我被困在这一点上。请帮我。

Red*_*Red 1

您需要的是检查数字空格是否多次出现

“亲爱的用户 1 谢谢”//应该失败,因为只有一个值存在

因此,您的正则表达式很好,只是它不检查数字空格是否出现多次

使用以下正则表达式

Dear\s*user\s*([\d]+[\s]+){2,5}\s*thanks$
Run Code Online (Sandbox Code Playgroud)
  • ([\d]+[\s]+){2,5}\s*

    • 捕获零次和无限次之间的组匹配数字以及零次和无限次之间的空白,至少两次,最多五次。

([\d]+[\s]+){2,5}\s*部分确保数字至少出现两次,因此字符串中的单个数字Dear user ... thanks将失败。

您可以根据需要在数字之前、之间和之后使用任意数量的空格。

Dear\s*user\s*([\d]+[\s]+){2,5}\s*thanks$
Run Code Online (Sandbox Code Playgroud)