34167
・言語  
JavaScript

・したいこと  
日本語と英語が混じった文字列中の、日本語で挟まれた空白だけを除去したいです

・例  
入力：田中 太郎 is Japanese boy.という 例文があります。  
出力：田中太郎 is Japanese boy.という例文があります。

よろしくお願いします。
CC BY-SA 3.0
2017-04-20T12:25:40.753
34164
2017-04-20T14:18:23.273
22675
question
javascript
Javascriptの空白の消し方
### 手順

  1. [Unicode対応 文字コード表](http://ash.jp/code/unitbl21.htm)から「日本語」と「英語」に該当すると思う文字を選んで下さい。
  2. 選んだ文字を正規表現の文字クラス(ex: `[a-z]`) で指定して下さい。
  3.     2. で選んだ文字クラスで空白文字を挟み、`String.prototype.replace` で置換して下さい。

### 注意点

「日 本 語」のような文字列に対し、`/日 本/` でマッチさせると `/本 語/` がマッチしなくなってしまう罠があります。  
肯定先読み `(?=pattern)` を活用して対処して下さい。

### スニペット

```

    function sample (string) {
      return String.prototype.replace.call(string, /([^\u0000-\u007F])\s+(?=[^\u0000-\u007F])/g, '$1');
    }
    
    console.log(sample('田中 太郎 is Japanese boy.'));  // 田中太郎 is Japanese boy.
    console.log(sample('田 中 太 郎'));                 // 田中太郎
    console.log(sample('"田中", "山田", \'佐藤\''));     // "田中", "山田", '佐藤'
```

### spitson さんのコードの問題点

コメントを付ける権限がなかったのでここに書きますが、spitson さんのコードには次の問題があります。

  * `[^\w.]` が半角スペースを含む為、`` のような半角スペースの連続にもマッチします。
  * 「,"'」等が「日本語」として扱われます。
  * 「日 本 語」を「日本 語」に置換し、2つめの空白を取り除けません。

Re: 初心者 さん
CC BY-SA 3.0
2017-04-20T13:07:54.510
34167
2017-04-20T14:18:23.273
2017-04-20T14:18:23.273
20262
20262
34164
answer
> 日本語と英語が混じった文字列中の、日本語で挟まれた空白だけを除去したいです

逆に解釈し、英数字だけで挟まれた空白以外を除去してみました。

```

    var str = '田中 太郎 is Japanese boy. 山田  花子 は Japanese girl.';
    
    var str2 = str.replace(/([^\w.]) +([^\w.])/g, '$1$2');
    
    
    console.log(str2);
```
CC BY-SA 3.0
2017-04-20T13:17:23.383
34168
2017-04-20T13:34:58.370
2017-04-20T13:34:58.370
15705
15705
34164
answer