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')在你的字符串上运行。这将查找后跟数字的任何字母,捕获字母和数字(注意括号),然后用两者之间的下划线替换它们。$1 和 $2 是对在正则表达式匹配中找到的捕获的字母和数字的回调。

于 2012-08-13T20:11:14.287 回答
3

最简单的方法是:

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

JS小提琴

请注意,这只会替换第一个实例,如果您希望替换所有实例,那么我建议使用上述方法,但使用g(全局)标志:

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

JS小提琴

于 2012-08-13T20:11:23.100 回答