我需要检查该数字是否在一个字母旁边,如果是,则添加一个下划线。Javascript正则表达式:如果一个字母与一个数字相邻,则添加一个下划线
例如:
Grapes23 --> Grapes_23
我已经尝试了好一阵子,但我是新来的正则表达式。我试过这个,但它不起作用:
str=str.replace(/([A-z]+)([0-9])/i, '_'); //if number next to letter, add underscore
我很感激任何帮助,谢谢!
我需要检查该数字是否在一个字母旁边,如果是,则添加一个下划线。Javascript正则表达式:如果一个字母与一个数字相邻,则添加一个下划线
例如:
Grapes23 --> Grapes_23
我已经尝试了好一阵子,但我是新来的正则表达式。我试过这个,但它不起作用:
str=str.replace(/([A-z]+)([0-9])/i, '_'); //if number next to letter, add underscore
我很感激任何帮助,谢谢!
寻找一个字母后面的数字:
str = str.replace(/([a-z])(?=[0-9])/ig, '$1_');
如何正则表达式的工作原理:
([a-z])
是任何小写字母,在括号包裹它使一个 “匹配组”(?=[0-9])
是一个“展望”。其基本意思是“然后按[0-9](任意数字)”i
意味着忽略的情况下(否则我们将不得不使用[a-zA-Z]
)g
意味着全球性的,或更换每场比赛找到(默认情况下只替换第一个)$1
意思是“第一匹配组”,或者是上面第一个项目符合的字母。我喜欢这一点,并了解它,但由于@gray说他是新来的正则表达式,一些解释会有所帮助。 (例如,你捕获的是字母,但不是数字 - 这是怎么回事?) – 2012-08-13 20:16:09
在@ jbabey的正则表达式中,你不匹配数字,只是一个紧跟在数字后面的字母。这就是为什么你不必在替换字符串中重新插入数字。 – jackwanders 2012-08-13 20:39:40
非常感谢你的完美工作。我很了解发生了什么,但我必须研究它才能确切地知道。并感谢大家elses答案,真的很感谢你的帮助 – gray 2012-08-13 21:00:33
在您的字符串上运行str.replace(/([a-zA-Z])(\d)/g,'$1_$2')
。这将查找任何字母后跟一个数字,捕获字母和数字(注意圆括号),然后用两者之间的下划线替换它们。 $ 1和$ 2是对捕获的字母和正则表达式匹配中找到的数字的回调。
最简单的方法是:
string.replace(/(\D)(\d)/,'$1_$2')
请注意,这只会替换第一例如,如果您要更换所有的情况下,那么我建议以上,但与g
(全局)标志:
string.replace(/(\D)(\d)/g,'$1_$2')
首先,'[A-Z]'不符合你想要的,'[a-zA-Z]'会。其次,您没有使用您设置的捕获组,您正在替换所有组件。第三,'+'字符意味着一个或更多,但在你的情况下,这并不重要,所以删除它。此外,'\ d'特殊字符将匹配所有数字,可代替'[0-9]' – TheZ 2012-08-13 20:16:10
感谢您的解释,非常有帮助 – gray 2012-08-13 21:03:31