Javascript正则表达式 - 开头没有空格+允许中间空格

san*_*hat 12 javascript regex

我想有一个正则表达式匹配字符串与开头没有空格.但是包含中间空格的字符串可以匹配.到目前为止,我在下面尝试过

[^-\s][a-zA-Z0-9-_\\s]+$
Run Code Online (Sandbox Code Playgroud)

正则表达式可视化

Debuggex演示

上面不允许在开头使用空格,但也不允许在字符串的中间/末尾.请帮我.

Roh*_*ain 15

在你的第2个字符类,\\s将匹配\s,而不是\s.因此它与空白不匹配.你应该在\s那里使用.另外,将连字符移到末尾,否则会在字符类中创建无意识的范围:

^[^-\s][a-zA-Z0-9_\s-]+$
Run Code Online (Sandbox Code Playgroud)


anu*_*ava 6

你需要使用这个正则表达式:

^[^-\s][\w\s-]+$
Run Code Online (Sandbox Code Playgroud)
  • 使用开始锚点 ^
  • 无需双重逃脱 \s
  • 同样重要的是使用连字符作为字符类中的第一个OR最后一个字符.
  • \w 和...一样 [a-zA-Z0-9_]


Sab*_*san 5

在开头使用 \S

^\S+[a-zA-Z0-9-_\\s]+$
Run Code Online (Sandbox Code Playgroud)


Wik*_*żew 5

如果您打算匹配匹配您的模式任意长度(甚至是空字符串)的字符串不以空格开始,使用(?!\s)权后^

/^(?!\s)[a-zA-Z0-9_\s-]*$/
  ^^^^^^
Run Code Online (Sandbox Code Playgroud)

或者,请记住,[A-Za-z0-9_]在 JS 正则表达式中等于\w

/^(?!\s)[\w\s-]*$/
Run Code Online (Sandbox Code Playgroud)

(?!\s)是一个负前瞻,匹配字符串中没有紧跟空格(与\s模式匹配)的位置。

如果您想在字符串开头添加更多“禁止”字符(看起来您也不允许-),请继续[\s-]在前瞻中使用字符类:

/^(?![\s-])[\w\s-]*$/
Run Code Online (Sandbox Code Playgroud)

要匹配至少 1 个字符,请替换*+

/^(?![\s-])[\w\s-]+$/
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示。JS演示:

/^(?!\s)[a-zA-Z0-9_\s-]*$/
  ^^^^^^
Run Code Online (Sandbox Code Playgroud)