Javascript RegExp匹配单词直到空格或字符

Javascript RegExp匹配单词直到空格或字符,javascript,regex,Javascript,Regex,我试图匹配所有以#开头的单词和2#之间的单词(参见示例) 结果将是[“#西班牙”、“#西班牙”、“#普通”],但它应该是[“#测试”、“#西班牙”、“#普通”] 额外:如果结果没有#,那就太好了 有人对此有解决方案吗?您可以使用 /#\w+(?:(?: +\w+)*#)?/g 见 正则表达式匹配: #-哈希符号 \w+-一个或多个字母数字和下划线字符 (?:(?:+\w+*)?-一次或零次出现: (?:+\w+)*-零次或多次出现一个或多个空格,后跟一个或多个单词字符,后跟 #-哈希符号

我试图匹配所有以#开头的单词和2#之间的单词(参见示例)

结果将是
[“#西班牙”、“#西班牙”、“#普通”]
,但它应该是
[“#测试”、“#西班牙”、“#普通”]

额外:如果结果没有#,那就太好了

有人对此有解决方案吗?

您可以使用

/#\w+(?:(?: +\w+)*#)?/g

正则表达式匹配:

  • #
    -哈希符号
  • \w+
    -一个或多个字母数字和下划线字符
  • (?:(?:+\w+*)?
    -一次或零次出现:
    • (?:+\w+)*
      -零次或多次出现一个或多个空格,后跟一个或多个单词字符,后跟
    • #
      -哈希符号
注意:如果可以有除文字字符以外的字符(在
[A-Za-z0-9]范围内的字符)
,则可以将
\w
替换为
[^.]

/#[^ #]+(?:(?: +[^ #]+)*#)?/g

var re=/#[^#]+(?:(?:+[^#]+)*#)/g;
var str=“#测试模式#西班牙降雨#主要停留在#平原#西班牙有#测试#和更多#这里”;
var m=str.match(re);
如果(m){
//使用ES6箭头函数
m=m.map(s=>s.replace(/#$/g,');
//ES5当量
/*m=m.map(函数){
返回s.replace(/#$/g.);
});*///摆脱拖尾#
document.body.innerHTML=“+JSON.stringify(m,0,4)+”;
#(?:\b[\s\S]*?\b#|\w+)

}
您也可以尝试此正则表达式

  • (?:
    打开一个用于替换的
  • \b
  • \w
  • [\s\s]
    匹配任何字符

(与
g
global一起使用)

好吧,试试看。我怀疑用正则表达式去除尾随的
有那么容易。@E.Fortes答案由Wiktor而不是我,他添加了答案,并解释、投票和接受,如果这解决了问题。我更新了代码片段,同时删除了尾随的
。我添加了另一个正则表达式,以防出现非单词字符在散列符号之间。主要的一点是里面应该有一个空格。代码段也被更新了。谢谢你的帮助和很好的解释。完成了工作。谢谢bobble。我已经用过这个:/#[^#]+(?:(?:+[^#]+)*#
#(?:\b[\s\S]*?\b#|\w+)