我有一个输入框,效果很好,但我的问题是脚本检查其中是否包含某些单词。现在我有:
$gameVariables.value(1).toLowerCase().includes("steal") || $gameVariables.value(1).toLowerCase().includes("thief") || $gameVariables.value(1).toLowerCase().includes("pickpocket")
这工作得很好,但我更希望它只适用于整个单词。我该如何去做呢?
我还想知道是否有办法缩短这个脚本,这样我就不必为每个单词复制并粘贴到同一行。我尝试了以下代码(不起作用。它只适用于第一个单词,但不适用于后面的单词。):
$gameVariables.value(1).toLowerCase().includes("steal","thief","pickpocket")
最佳答案
如果您只想要与 theif
或 steal
或 pickpocket
完全匹配的单词,您可以使用以下代码
const value = $gameVariables.value(1);
const regex = /^(thief|steal|pickpocket)$/i;
return regex.test(value);
解释一下上面的正则表达式,
^
将确保正则表达式从一开始就匹配(
和)
创建正则表达式应匹配的组|
就像编码中的 or 运算符$
用于当您希望结尾与正则表达式的结尾完全匹配时i
基本上是一个标志,告诉您在进行检查时忽略大小写。因此,您也不需要在此处使用.toLowerCase()
因此,上面的代码基本上会检查该单词是否与 theif
或 steal
或 pickpocket
完全匹配,并返回 false
如果单词是 theifs
或 theifsteal
但是,如果您不需要完全匹配,只想知道输入值是否包含这些单词,那么简单的答案是不使用 ^
和 $
const value = $gameVariables.value(1);
const regex = /(thief|steal|pickpocket)/i;
return regex.test(value);
结果是,对于 thief
、steal
和 pickpocket
等精确匹配来说,它是正确的,并且当这两个词中的任何一个都出现在整个语句中,例如this statements contains thief
。对于像 the
或 STL
这样的词,第二种方法会失败。但问题是它也会与 steals
匹配,或者对于像 this statements containssteals
这样的语句返回 true。要修复它,您可以使用以下代码
const value = $gameVariables.value(1);
const regex = /(thief|steal|pickpocket)\b/i;
return regex.test(value);
\b
允许您执行“仅全字”搜索
因此,如果语句包含thisstatement containssteal
,它将返回 false,但当语句包含thisstatement containssteal
或与 完全匹配的单词时,它将返回 true >窃取
关于Javascript 问题 : Script that checks to see if words were included in an input box. 仅全字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59683933/