Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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 如何从圆括号中获取所有单词,然后用html div代码替换所有单词 var message=$(“textarea”).val(); var matches=message.match(/\(.*?)/); 如果(匹配){ var submatch=message.replace(“(“+匹配[1]+”)”,”); 控制台日志(子匹配);_Javascript - Fatal编程技术网

Javascript 如何从圆括号中获取所有单词,然后用html div代码替换所有单词 var message=$(“textarea”).val(); var matches=message.match(/\(.*?)/); 如果(匹配){ var submatch=message.replace(“(“+匹配[1]+”)”,”); 控制台日志(子匹配);

Javascript 如何从圆括号中获取所有单词,然后用html div代码替换所有单词 var message=$(“textarea”).val(); var matches=message.match(/\(.*?)/); 如果(匹配){ var submatch=message.replace(“(“+匹配[1]+”)”,”); 控制台日志(子匹配);,javascript,Javascript,message变量是一个文本区域,div是一个CSS图像,带有一个笑脸,在我的聊天应用程序上显示笑脸。当我使用时,“这是(笑脸1)和(笑脸2)”,子匹配变量只显示笑脸1,笑脸2用括号保持不变;如“这是笑脸1和(笑脸2)”。我无法用id获取此DIV(smiley2)这包括方括号,因为id没有方括号,但我需要方括号,因为这是一条带微笑的聊天消息,在方括号中。String#replace可以通过regex进行替换,这正是您试图做的。使用g标志使其成为一个全局regex,可以匹配多个内容。提供回调函数i

message
变量是一个文本区域,
div
是一个CSS图像,带有一个笑脸,在我的聊天应用程序上显示笑脸。当我使用
时,“这是(笑脸1)和(笑脸2)”
,子匹配变量只显示笑脸1,笑脸2用括号保持不变;如
“这是笑脸1和(笑脸2)”
。我无法用
id
获取此DIV(smiley2)这包括方括号,因为
id
没有方括号,但我需要方括号,因为这是一条带微笑的聊天消息,在方括号中。

String#replace
可以通过regex进行替换,这正是您试图做的。使用
g
标志使其成为一个全局regex,可以匹配多个内容。提供回调函数ion将允许您获得每场比赛的分组。有关更多信息,请参阅

var message=“这是(smiley1)和(smiley2)”;
var result=message.replace(/\(.*)\)/g,函数(match,p1){返回“”;});
console.log(result);
作为前传,我想说@Klaycon的答案将是我处理用例的首选方法。虽然我喜欢他们关于如何完成任务的答案,但它并没有解释问题中的代码为什么不起作用,或者如何修改(而不是替换)的原因下面是解决这个问题的一个尝试


解释 在不使用regex全局标志(即
g
)的情况下,
.match()
将只提取第一个匹配的响应。因此,
matches
变量是第一个匹配文本及其捕获组的数组。它看起来类似于以下内容(注意,它不包含任何smiley2内容):

有人可能会认为,您可以简单地将
g
添加到您的正则表达式中,并获取所有捕获组,但JavaScript不是Perl(或其他可能允许的语言)。正则表达式引擎功能强大,但有限。相反,您必须使用
matchAll()
方法。但是,即使这样,它也会受到限制,因为它返回的是一个iterable对象,而不是数组

因此,一旦您拥有该对象,您就可以从中创建一个数组(例如,使用
array.from
),该数组将包含所有匹配的文本和捕获组。结果如下所示:

[ "(smiley1)", "smiley1" ]
从这里,您可以迭代matches数组,并使用
replace()
函数。这就引出了下一点。
replace()的第一个参数
可以是字符串或正则表达式。如果它是字符串(如您所称),它只会在遇到的第一个字符串时进行一次性替换。@klayton的答案使用带有全局“g”修饰符的正则表达式进行重复。如果您想使用字符串替换,您可以,只需要迭代新的matches数组并将其称为mult我去过几次

示例(数组)
let message=$(“textarea”).val();
设re=/\(.*?\)/g;//全局修饰符
让matches=Array.from(message.matchAll(re));//使用matchAll
matches.forEach(match=>{
让替换_文本=``
message=message.replace(匹配[0],替换文本)
})
console.log(消息)

这是(微笑1)和(微笑2)

非常感谢。
[ "(smiley1)", "smiley1" ]
[ ["(smiley1)","smiley1"],
  ["(smiley2)","smiley2"] ]