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

时间:2016-02-12 12:39:07

标签: javascript regex

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

var str = "#The test# rain in #SPAIN stays mainly in the #plain"; 
var res = str.match(/(#)[^\s]+/gi);

结果为["#The", "#SPAIN", "#plain"],但应为["#The test#", "#SPAIN", "#plain"]

额外:如果结果没有#。

会很好

有人有解决方案吗?

2 个答案:

答案 0 :(得分:4)

您可以使用

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

请参阅demo here

正则表达式匹配:

  • # - 哈希符号
  • \w+ - 一个或多个字母数字和下划线字符
  • (?:(?: +\w+)*#)? - 出现一次或零次:
    • (?: +\w+)* - 一个或多个空格出现零次或多次,后跟一个或多个单词字符,后跟
    • # - 哈希符号

注意:如果可能有字词以外的字符([A-Za-z0-9_]范围内的字符),则可以将\w替换为[^ #]

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

请参阅another demo



var re = /#[^ #]+(?:(?: +[^ #]+)*#)?/g;
var str = '#The test-mode# rain in #SPAIN stays mainly in the #plain #SPAIN has #the test# and more #here';
var m = str.match(re);
if (m) {

  // Using ES6 Arrow functions
  m = m.map(s => s.replace(/#$/g, ''));

  // ES5 Equivalent
  /*m = m.map(function(s) {
    return s.replace(/#$/g, '');
  });*/ // getting rid of the trailing #
  document.body.innerHTML = "<pre>" + JSON.stringify(m, 0, 4) + "</pre>";
}
&#13;
&#13;
&#13;

答案 1 :(得分:1)

你也可以试试这个正则表达式。

#(?:\b[\s\S]*?\b#|\w+)

See demo at regex101(与g全球flag一起使用)