我有一个简单的字符串,想要将[~sample]转换为@sample。例如:
var string = 'Completely engineer client-based strategic [~theme] areas before cross [~media] technology';
string.replace('[~', '@');
我尝试了上面的解决方案,但它只转换第一个,并且]无法删除。
现在我学会了如何使用/g。
我有一个简单的字符串,想要将[~sample]转换为@sample。例如:
var string = 'Completely engineer client-based strategic [~theme] areas before cross [~media] technology';
string.replace('[~', '@');
我尝试了上面的解决方案,但它只转换第一个,并且]无法删除。
现在我学会了如何使用/g。
.replace
[@
和 ]
更为复杂。
var string = 'Strategic [~theme] areas with cross [~media] technology [this is fine] ok?';
document.body.innerHTML = string.replace(/\[~([^\]]+)\]/g, '@$1');
([^\]]+)
确保捕获任何不是 ]
但被 [~
和 ]
包围的字符,这是更好的解决方案,可以防止像 [don't mess with me]
这样的文本被... 搞乱。
详细解释了 RegExp,请点击此处
~
的 [
]
?问题中没有这样的情况标准吗? - guest271314尝试使用这段代码:
string.replace(/(\[~)(\w+)(\])/g, function(match, p1, p2, p3) {
// p1 = [~
// p2 = theme / media / whateverWord
// p3 = ]
return '@' + p2
// Returns @whateverWord
})
\[
将选择一个[
- ~
将选择一个~\w
将选择任何字母数字字符或_
- +
表示字母数字字符必须至少出现一次,即在[~
和]
之间必须至少有1
个字母
在第三组:\]
将选择任何]
在函数中:match
未在输出中使用,但它包含整个匹配的子字符串
- p1
包含[~
- p2
包含[~
和]
之间的单词,即theme
或media
- p3
包含]
return
语句返回一个@
,后跟[~
和]
之间的单词[~
为@
以下是一个工作示例:
var string = 'Completely engineer client-based strategic [~theme] areas before cross [~media] technology. Also, [this tag] [will be kept]'
document.body.innerHTML = string.replace(/(\[~)(\w+)(\])/g, function(match, p1, p2, p3) {
return '@' + p2
})
编辑:实际上,你可以简化它:
string.replace(/(\[~)(\w+)(\])/g, '@$2')
var string = 'Completely engineer client-based strategic [~theme] areas before cross [~media] technology. Also, [this tag] [will be kept]'
document.body.innerHTML = string.replace(/(\[~)(\w+)(\])/g, '@$2')
$2
包含第二个捕获组的内容,第二个捕获组包含 [~
和 ]
之间的文本。所以输出是一个@
,后跟文本。" hello [something not a placheloder] "
吗? - dandavisYou could use RegExp
/(\[~)|(\])/g
var string = 'Completely engineer client-based strategic [~theme] areas before cross [~media] technology';
var res = string.replace(/(\[~)|(\])/g, function(match, p1, p2) {
if (p1) return "@";
if (p2) return ""
});
document.body.textContent = res;
[citation needed]
,也没有指示该字符串部分的结果应该是什么。不确定为什么要在注释中包含这个要求。 - guest271314str.replace(/\[~(\w+)\]/g, "@$1")
。 - dandavis[
或 ]
字符的字符串的其他部分;包括或不包括 [
,]
中的字符,也没有说明预期结果应该是什么。你是如何确定应该替换 [Completely] [engineer] []
字符串中的 [
]
,还是不替换的呢? - guest271314[this tag] [will be kept]
,也没有说明如果在字符串中找到这些字符串片段时期望的结果是什么;您是如何确定[this tag] [will be kept]
中的[
或]
应该被替换还是不应该被替换的? - guest271314"Completely engineer client-based strategic [~theme] areas before cross [~media] technology [with some] other bits.".replace(/\[~([^\]]+)\]/g,"@$1");
你需要在搜索中加上波浪号(~)进行筛选。我对所有疯狂的负分评价感到惊讶。人们都在努力提供帮助。如果有人对帖子和回答有问题,解释为什么你会打负分更有帮助,而不是没有解释地随便点踩。
正如其他人所说,谷歌是朋友,尝试在www.regular-expressions.info上搜索获取更多帮助。
var string = 'Completely engineer client-based strategic [~theme] areas before cross [~media] technology'
document.body.innerHTML = string.replace(/\[~(\w+)\]/g, '@$1');
我认为这就是你要找的 https://jsfiddle.net/DIRTY_SMITH/7oe5kh9L/33/
string.replace(/\[~/g, '@').replace(/\]/g, '');
var string = 'Completely engineer client-based strategic [~theme] areas before cross [~media] technology';
alert("Starting string:" +string);
var res = string.replace(/\[~/g, '@').replace(/\]/g, '');
alert("Final string: "+res)
[~sample]
to@smaple
or to@sample
? 我只是确认一下,这是一个打字错误吗? - user4227915