-1

すべての単語を 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")

複数のスペースを single に置き換えることは気にしません。

次のような単一の単語でこれを達成できます

\[\[do\"(\w+)\"\]\] and replacing regex cool\(\"$1\")しかし、これは効果的な解決策のようには見えず、複数の単語と一致しません....不完全な質問をお詫びします

どんな助けでも感謝されます

4

7 に答える 7

3

次の正規表現を見つけます。

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

そして、次の置換を行います。

'cool($1)'

ここで行われている唯一の特別なことは、文字クラスを有利に使用することです。

[\w\s]+

1 つ以上の単語またはスペース文字 (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*一致させるには、スペースがなくても一致するため、を使用することはできません。

一方、スペースのない1つの単語である「hi」も一致させたいようです。

おそらく、スペースで区切られた1つ以上の単語に一致させる必要があります。その場合は、正規表現パターンを使用してください

(\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 までの 1 つ以上の最初の一致を、数字とアンダースコアと共に上下に並べ、その後に 0 個以上のスペース文字が続くものを見つけます。

  • スペース文字
  • 復帰文字
  • 垂直タブ文字
  • 改行文字
  • タブ文字
  • フォーム フィード文字

次に、0 個以上の A から Z までが、数字とアンダースコアと共に上下に表示されます。

\s単純なスペースだけでなく、文字どおりのスペースを入れることができ、それは機能します。

私はあなたが望むと信じています:

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

Aから Z の 1 つまたは複数のすべての一致は、数字とアンダースコアとともに上下に移動し、その後に1 つまたは複数のスペースが続き、その後に A から Z の 1 つまたは複数が数字とアンダースコアとともに上下に移動します。

これは、スペースで区切られたすべての単語文字に一致します。

句読点やスペースなしで単語文字のすべてのクラスターを検索するだけの場合は、次のようにします。

/(\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 に答える