regex 使用正则表达式在驼峰式大小写字符串中放置空格

vmpqdwk3  于 2023-08-08  发布在  其他
关注(0)|答案(6)|浏览(114)

我从add a space between two words开车问我的问题。
要求:拆分一个驼峰式大小写字符串,并在大写字母前加空格,然后加一个小写字母,或者什么都不加。大写字母之间不应有空格。
例如:CSVFilesAreCoolButTXT是一个字符串,我想以这种方式产生CSV Files Are Cool But TXT
我开着一辆普通快车这样走:

"LightPurple".replace(/([a-z])([A-Z])/, '$1 $2')

字符串
如果你有两个以上的单词,那么你需要使用g标志来匹配它们。

"LightPurpleCar".replace(/([a-z])([A-Z])/g, '$1 $2')


如果你试图拆分像CSVFile这样的单词,那么你可能需要使用这个正则表达式:

"CSVFilesAreCool".replace(/([a-zA-Z])([A-Z])([a-z])/g, '$1 $2$3')


但它仍然不符合我提出的要求。

busg9geu

busg9geu1#

var rex = /([A-Z])([A-Z])([a-z])|([a-z])([A-Z])/g;

"CSVFilesAreCoolButTXT".replace( rex, '$1$4 $2$3$5' );
// "CSV Files Are Cool But TXT"

字符串
还有

"CSVFilesAreCoolButTXTRules".replace( rex, '$1$4 $2$3$5' );    
// "CSV Files Are Cool But TXT Rules"


匹配正则表达式模式的主题字符串的文本将被替换字符串'$1$4 $2$3$5'替换,其中$1$2等。引用与模式的捕获组()匹配的子字符串。
$1是指第一个([A-Z])子模式匹配的子串,$3是指第一个([a-z])子模式匹配的子串,以此类推。
由于交替字符|,要进行匹配,正则表达式必须匹配([A-Z])([A-Z])([a-z])子模式或([a-z])([A-Z])子模式,因此如果进行匹配,则几个捕获组将保持不匹配。这些捕获组可以在替换字符串中引用,但它们对它没有影响-实际上,它们将引用空字符串。
替换字符串中的空格确保每次匹配时在主题字符串中插入空格(尾部g标志意味着正则表达式引擎将查找多个匹配)。

oewdyzsn

oewdyzsn2#

如果第一个字符始终为小写。

'camelCaseString'.replace(/([A-Z]+)/g, ' $1')

字符串
如果第一个字符是大写。

'CamelCaseString'.replace(/([A-Z]+)/g, ' $1').replace(/^ /, '')

r6hnlfcb

r6hnlfcb3#

在.NET中使用正则表达式拆分CamelCase:

Regex.Replace(input, "((?<!^)([A-Z][a-z]|(?<=[a-z])[A-Z]))", " $1").Trim();

字符串

范例:

Regex.Replace("TheCapitalOfTheUAEIsAbuDhabi", "((?<!^)([A-Z][a-z]|(?<=[a-z])[A-Z]))", " $1").Trim();

**输出:**阿联酋的首都是阿布扎比

ajsxfq5m

ajsxfq5m4#

这对我很有效

let camelCase = "CSVFilesAreCoolButTXTRules"
let re = /[A-Z-_\&](?=[a-z0-9]+)|[A-Z-_\&]+(?![a-z0-9])/g
let delimited = camelCase.replace(re,' $&').trim()

字符串
上面的代码几乎适用于我所有的用例。我有一些特殊之处,'&'和'_'应该被视为等同于大写字符

  • 这是一个鼻涕虫
  • loremIpsum -> lorem Ipsum
  • PAGS_US -> PAGS_US
  • 阿联酋的首都是阿布扎比
  • eclipseRCPExt -> eclipse RCP Ext
  • 价值->价值
  • SG&A ->
    简要说明
[A-Z-_\&](?=[a-z0-9]+)
//Matches normal words i.e. one uppercase followed by one or more non-uppercase characters 

[A-Z-_\&]+(?![a-z0-9]) 
//Matches acronyms & abbreviations i.e. a sequence of uppercase characters that are not followed by non-uppercase characters

**Check out the regexr fiddle here**第一个字符

a5g8bdjr

a5g8bdjr5#

使用lookaheads / behinds替换JavaScript的驼峰式大小写:

"TheCapitalOfTheUAEIsAbuDhabi".replace(/([A-Z](?=[a-z]+)|[A-Z]+(?![a-z]))/g, ' $1').trim()
// "The Capital Of The UAE Is Abu Dhabi"

字符串

rryofs0p

rryofs0p6#

对于那些谁也希望降低大写字母的所有字除了第一。

function PascalCaseToText(str) {
  return str.replace(/([a-z])([A-Z])/g, function(_, g1, g2) { return g1 + ' ' + g2.toLowerCase();  })
}

PascalCaseToText("SomePascalString");
// Some pascal string

字符串

相关问题