简单的正则表达式匹配多个单词与空格/多个空格或没有空格

时间:2012-11-28 21:26:49

标签: javascript java regex string

我试图将所有单词与单个或多个空格匹配。我的表达

(\ w + \ s *)*无效

编辑1: 假设我有一个这种形式的句子

[[do "hi i am bob"]]
[[do "hi   i am Bob"]]

now I have to replace this with 
cool("hi i am bob") or 
cool("hi    i am Bob")

我不关心用单个替换多个空格。

我可以用一个单词来实现这个,比如

\[\[do\"(\w+)\"\]\] and replacing regex cool\(\"$1\")但这看起来不是一个有效的解决方案,并且不匹配多个单词.... 我为不完整的问题道歉

任何帮助都将是aprecciated

7 个答案:

答案 0 :(得分:3)

找到这个正则表达式:

/\[\[do\s+("[\w\s]+")\s*\]\]/

并进行以下替换:

'cool($1)'

这里唯一特别的事情是使用

来利用字符类
[\w\s]+

匹配一个或多个单词或空格字符(a-z,A-Z,0-9,_和空格)。那&#39 ;;;吃掉你内心的东西没问题。

'[[do "hi   i am Bob"]]'.replace(/\[\[do\s+("[\w\s]+")\s*\]\]/, 'cool($1)')

吐出

cool("hi   i am Bob")

虽然 - 如果你想添加标点符号(你可能会这样),你应该这样做:

/\[\[do\s+("[^"]+")\s*\]\]/

这将匹配任何不是双引号的字符,保留您的子字符串。有更复杂的问题可以让你处理转义的引号,但我认为这不属于这个问题的范围。

答案 1 :(得分:2)

要匹配“所有单个或多个空格的单词”,您不能使用\s*,因为它甚至不会匹配任何空格。

另一方面,看起来你想要匹配“hi”,这是一个没有空格的单词。

您可能希望匹配由空格分隔的一个或多个单词。如果是这样,请使用正则表达式

(\w+(?:$|\s+))+

\w+(\s+\w+)*

答案 2 :(得分:0)

我不确定,但也许这就是你想要的:

"Hi I am bob".match(/\b\w+\b/g);  // ["Hi", "I", "am", "bob"]

答案 3 :(得分:0)

你的正则表达式是:

/([a-zA-Z0-9_]{1,}[ \r\v\n\t\f]{0,}){0,}/

也就是说,找到A到Z中的一个或多个的第一个匹配,打扰低位和高位以及数字和下划线,然后是零个或多个空格字符:

  • 空格字符
  • 回车符号
  • 垂直制表符
  • 换行符
  • 制表符
  • 换页符

然后是零或更多的A到Z打扰下部和上部以及数字和下划线。

\s不仅仅匹配简单空格,还可以放入文字空间,它可以正常工作。

我相信你想要:

/(\w+ +\w+)/g

A到Z中的一个或多个的所有匹配打扰低位和高位以及数字和下划线,然后是一个或更多空格,然后是一个或更多更多的A到Z打扰了下面和上面以及数字和下划线。

这将匹配由空格分隔的所有单词字符

如果您只想查找所有单词字符簇,没有标点符号或空格,那么您可以使用:

/(\w+)/g

将找到组合在一起的所有单词字符

答案 4 :(得分:0)

简单。匹配非空格的所有字符组

var str = "Hi I   am   Bob";

var matches = str.match(/[^ ]+/g); // => ["Hi", "I", "am", "Bob"]

答案 5 :(得分:0)

var regex=/\w+\s+/g;

现场演示:http://jsfiddle.net/GngWn/

[更新]我刚刚回答了这个问题,但根据评论,这更有可能是你想要的:

var regex=/\b\w+\b/g;

\ b是单词边界。

演示:http://jsfiddle.net/GngWn/2/

[Update2]你的编辑使它成为一个完全不同的问题:

string.replace(/\[\[do "([\s\S]+)"\]\]/,'cool("$1")');

演示:http://jsfiddle.net/GngWn/3/

答案 6 :(得分:0)

使用正则表达式模式\w+(\s+\w+)*,如下所示:

m = s.match(/\w+(\s+\w+)*/g);