-1

我正在尝试将所有单词与单个或多个空格匹配。我的表情

(\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\")但这看起来不是一个有效的解决方案,并且不匹配多个单词....对于不完整的问题,我深表歉意

任何帮助将不胜感激

4

7 回答 7

3

找到这个正则表达式:

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

并执行以下替换:

'cool($1)'

这里唯一要做的特别的事情是使用字符类来发挥我们的优势

[\w\s]+

匹配一个或多个单词或空格字符(az、AZ、0-9、_ 和空格)。那';; 吃掉你内部的东西没问题。

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

吐出来

cool("hi   i am Bob")

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

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

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

于 2012-11-28T22:21:18.637 回答
2

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

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

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

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

或者

\w+(\s+\w+)*
于 2012-11-28T21:30:49.540 回答
0

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

"Hi I am bob".match(/\b\w+\b/g);  // ["Hi", "I", "am", "bob"]
于 2012-11-28T21:34:10.590 回答
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

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

于 2012-11-28T21:34:39.057 回答
0

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

var str = "Hi I   am   Bob";

var matches = str.match(/[^ ]+/g); // => ["Hi", "I", "am", "Bob"]
于 2012-11-28T21:35:00.527 回答
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/

于 2012-11-28T21:35:43.943 回答
0

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

m = s.match(/\w+(\s+\w+)*/g);
于 2012-11-28T21:37:52.763 回答