1

数字が文字の隣にあるかどうかを確認する必要があり、そうであればアンダースコアを追加します。

例えば:

Grapes23 --> Grapes_23

私はかなり長い間試してきましたが、正規表現は初めてです。私はこれを試しましたが、うまくいきません:

str=str.replace(/([A-z]+)([0-9])/i, '_'); //if number next to letter, add underscore

助けていただければ幸いです、ありがとう!

4

3 に答える 3

5

文字の後に数字が続くものを探します。

str = str.replace(/([a-z])(?=[0-9])/ig, '$1_');

http://regexr.com?31qsr

この正規表現の仕組み:

  • ([a-z])は任意の小文字で、括弧で囲むと「一致するグループ」になります
  • (?=[0-9])「先読み」です。それは基本的に「[0-9](任意の数字)が続く」ことを意味します
  • i大文字と小文字を区別しないことを意味します (それ以外の場合は を使用する必要があります[a-zA-Z])
  • gグローバルを意味するか、見つかったすべての一致を置き換えます(デフォルトでは最初のもののみが置き換えられます)
  • $1は「最初に一致したグループ」、または上記の最初の箇条書きに一致した文字を意味します。
于 2012-08-13T20:11:50.293 に答える
4

str.replace(/([a-zA-Z])(\d)/g,'$1_$2')あなたのひもで実行してください。これは、任意の文字の後に数字が続くものを探し、文字と数字の両方を取得して (括弧に注意してください)、2 つの間のアンダースコアに置き換えます。$1 と $2 は、正規表現の一致で見つかったキャプチャされた文字と数字へのコールバックです。

于 2012-08-13T20:11:14.287 に答える
3

最も簡単な方法は次のとおりです。

string.replace(/(\D​​​​​​​​​​​​)(\d)/,'$1_$2')

JSフィドル

これは最初のインスタンスのみを置き換えることに注意してください。すべてのインスタンスを置き換えたい場合は、上記をお勧めしますが、g(global) フラグを使用します。

string.replace(/(\D​​​​​​​​​​​​)(\d)/g,'$1_$2')

JSフィドル

于 2012-08-13T20:11:23.100 に答える