Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Regexp:如果字母与数字相邻,则添加下划线_Javascript_Regex_Space - Fatal编程技术网

Javascript Regexp:如果字母与数字相邻,则添加下划线

Javascript Regexp:如果字母与数字相邻,则添加下划线,javascript,regex,space,Javascript,Regex,Space,我需要检查数字是否在字母旁边,如果是,请添加下划线 例如: Grapes23-->Grapes\u 23 我已经尝试了很长一段时间,但我对正则表达式还不熟悉。我试过这个,但不起作用: str=str.replace(/([A-z]+)([0-9])/i, '_'); //if number next to letter, add underscore 谢谢你的帮助 在字符串上运行str.replace(/([a-zA-Z])(\d)/g,'$1_$2')。这将查找后跟数字的任何字母,捕获字母

我需要检查数字是否在字母旁边,如果是,请添加下划线

例如:

Grapes23-->Grapes\u 23
我已经尝试了很长一段时间,但我对正则表达式还不熟悉。我试过这个,但不起作用:

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

谢谢你的帮助

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

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

最简单的方法是:

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

请注意,这将仅替换第一个实例,如果您希望替换所有实例,那么我建议使用上面的
g
(全局)标志:


.

最简单的方法是:

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

请注意,这将仅替换第一个实例,如果您希望替换所有实例,那么我建议使用上面的
g
(全局)标志:


.

查找后跟数字的字母:

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

此正则表达式的工作原理:

  • ([a-z])
    是任何小写字母,用括号将其包装成字母 “匹配组”
  • (?=[0-9])
    是一种“前瞻”。它的基本意思是“后跟[0-9](任何数字)
  • i
    表示忽略大小写(否则我们将不得不使用
    [a-zA-Z]
  • g
    表示全局,或替换它找到的每个匹配项(默认仅替换第一个)
  • $1
    表示“第一个匹配组”,或与上面第一个项目符号匹配的字母

查找后跟数字的字母:

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

此正则表达式的工作原理:

  • ([a-z])
    是任何小写字母,用括号将其包装成字母 “匹配组”
  • (?=[0-9])
    是一种“前瞻”。它的基本意思是“后跟[0-9](任何数字)
  • i
    表示忽略大小写(否则我们将不得不使用
    [a-zA-Z]
  • g
    表示全局,或替换它找到的每个匹配项(默认仅替换第一个)
  • $1
    表示“第一个匹配组”,或与上面第一个项目符号匹配的字母

我不会将
\D
用作所述“字母”的等价物,因为它将匹配任何非数字。啊,谢谢,@Joe;我以为我错过了一个边缘案例(我的JS小提琴是有限的)我不会将
\D
用作所述“字母”的等价物,因为它将匹配任何非数字。啊,谢谢,@Joe;我以为我错过了一个边缘案例(我的JS小提琴是有限的)我喜欢这一点,也理解这一点,但既然@gray说他是regex的新手,一些解释会有所帮助。(例如,你捕获的是字母而不是数字——这是怎么回事?)在@jbabey的正则表达式中,你没有匹配数字,只是一个紧跟数字的字母。这就是为什么您不必在替换字符串中重新插入数字的原因。非常感谢您,这非常有效。我有点明白发生了什么,但我必须研究它才能确切地知道。谢谢大家的回答,真的很感谢你的回答help@gray我会给我的回答加上一个简短的解释给后人,就像这样,我理解它,但既然@gray说他是regex的新手,一些解释会有所帮助。(例如,你捕获的是字母而不是数字——这是怎么回事?)在@jbabey的正则表达式中,你没有匹配数字,只是一个紧跟数字的字母。这就是为什么您不必在替换字符串中重新插入数字的原因。非常感谢您,这非常有效。我有点明白发生了什么,但我必须研究它才能确切地知道。谢谢大家的回答,真的很感谢你的回答help@gray我会给我的答案添加一个简短的解释给子孙后代首先,
[a-z]
将与您想要的不匹配,
[a-zA-z]
将。其次,您没有使用您设置的捕获组,而是在替换所有内容。第三,
+
字符表示一个或多个字符,但在您的情况下,这并不重要,所以请删除它。另外,
\d
特殊字符将匹配所有数字,并可以代替
[0-9]
谢谢您的解释,非常有用首先,
[A-z]
将不匹配您想要的内容,
[A-zA-z]
将匹配。其次,您没有使用您设置的捕获组,而是在替换所有内容。第三,
+
字符表示一个或多个字符,但在您的情况下,这并不重要,所以请删除它。另外,
\d
特殊字符将匹配所有数字,并可以代替
[0-9]
谢谢您的解释,非常有用