【发布时间】:2018-01-25 04:34:40
【问题描述】:
我有一个下一个字符串:
$scope.string = "User {{User Firstname}} </p><p>System {{Reported System Name}} </p><p>Desc {{Description}}</p><ol></ol>"
我正在努力实现下一个结果:
$scope.string = "User {{userFirstname}} </p><p>System {{reportedSystemName}} </p><p>Desc {{description}}</p><ol></ol>"
在正则表达式的帮助下,我可以找到骆驼化文本的必要条件
if ($scope.string.match(/\{\{(.*?)\}\}/g)){
for (var i = 0; i < $scope.string.match(/\{\{(.*?)\}\}/g).length; i ++){
$scope.string.match(/\{\{(.*?)\}\}/g)[i] = camelizeBrackets($scope.string.match(/\{\{(.*?)\}\}/g)[i])
}
}
但是我发现 here 并修改为使用花括号内的文本的函数 camelizeBrackets 根本不起作用
function camelizeBrackets(str) {
return str.replace(/\{\{(?:^\w|[A-Z]|\b\w|\s+)\}\}/g, function(match, index) {
if (+match === 0) return "";
return index === 0 ? match.toLowerCase() : match.toUpperCase();
});
}
谁能解释我做错了什么?
【问题讨论】:
-
要解释你做错了什么,需要解释你想要做什么或你想要做什么的正则表达式。这部分正则表达式
(?:^\w|[A-Z]|\b\w|\s+)无法解释任何事情,因为它无法识别。那么,有更好的解释吗? -
@sln 我更新了我的问题,如果您需要更多解释,请告诉我
-
所以你试图删除空格,降低第一个单词的第一个字母,高于第二个,第三个,..单词字母?第一个字母之后的字母呢,降低它们?
-
String.match 返回一个匹配数组,但将该数组的元素设置为新元素不会影响原始字符串。你会想做 $scope.string = $scope.string.replace(some regex, some replacement function);见String.replace
标签: javascript angularjs regex