2012-08-13 68 views
1

我需要检查该数字是否在一个字母旁边,如果是,则添加一个下划线。Javascript正则表达式:如果一个字母与一个数字相邻,则添加一个下划线

例如:

Grapes23 --> Grapes_23 

我已经尝试了好一阵子,但我是新来的正则表达式。我试过这个,但它不起作用:

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

我很感激任何帮助,谢谢!

+0

首先,'[A-Z]'不符合你想要的,'[a-zA-Z]'会。其次,您没有使用您设置的捕获组,您正在替换所有组件。第三,'+'字符意味着一个或更多,但在你的情况下,这并不重要,所以删除它。此外,'\ d'特殊字符将匹配所有数字,可代替'[0-9]' – TheZ 2012-08-13 20:16:10

+0

感谢您的解释,非常有帮助 – gray 2012-08-13 21:03:31

回答

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意思是“第一匹配组”,或者是上面第一个项目符合的字母。
+0

我喜欢这一点,并了解它,但由于@gray说他是新来的正则表达式,一些解释会有所帮助。 (例如,你捕获的是字母,但不是数字 - 这是怎么回事?) – 2012-08-13 20:16:09

+0

在@ jbabey的正则表达式中,你不匹配数字,只是一个紧跟在数字后面的字母。这就是为什么你不必在替换字符串中重新插入数字。 – jackwanders 2012-08-13 20:39:40

+0

非常感谢你的完美工作。我很了解发生了什么,但我必须研究它才能确切地知道。并感谢大家elses答案,真的很感谢你的帮助 – gray 2012-08-13 21:00:33

4

在您的字符串上运行str.replace(/([a-zA-Z])(\d)/g,'$1_$2')。这将查找任何字母后跟一个数字,捕获字母和数字(注意圆括号),然后用两者之间的下划线替换它们。 $ 1和$ 2是对捕获的字母和正则表达式匹配中找到的数字的回调。

3

最简单的方法是:

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

JS Fiddle

请注意,这只会替换第一例如,如果您要更换所有的情况下,那么我建议以上,但与g(全局)标志:

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

JS Fiddle

+0

我不会使用'\ D'作为描述“信”,因为它会匹配任何非数字。 – TheZ 2012-08-13 20:12:21

+0

+1对不起,这很好。 – Joe 2012-08-13 20:14:20

+0

啊,谢谢@Joe;我以为我错过了一个边缘案例(我的JS小提琴是有限的)。=) – 2012-08-13 20:14:56

相关问题