Nodejs相当于c sscanf

Nodejs equivalent of c sscanf

我需要一个行为类似于sscanf

的函数

例如,假设我们有一个看起来像这样的格式字符串(我正在寻找的函数不必完全像这样,而是类似的东西)

"This is normal text that has to exactly match, but here is a ${var}"

并且return/modify一个看起来像

的变量
{'var': <whatever was there>}

研究了一段时间后,我真正能找到的唯一东西是 scanf,但它采用输入形式 stdin,而不是 字符串

我知道有一个正则表达式解决方案,但我正在寻找一个无需正则表达式即可执行此操作的函数(正则表达式很慢)。但是,如果没有其他解决方案,我将接受正则表达式解决方案。

您的意思是让 ${var} 充当占位符吗?如果是这样,您可以通过将 " 替换为反引号来实现:

console.log(`This is normal text that has to exactly match, but here is a ${"whatever was there"}`)

在大多数内置正则表达式的语言中,正常的解决方案是使用正则表达式。

如果您不习惯或不喜欢正则表达式,我很抱歉。大多数编程世界都认为正则表达式知识是强制性的。

无论如何。对此的正常解决方案是 string.prototype.match:

let text = get_string_to_scan();

let match = text.match(/This is normal text that has to exactly match, but here is a (.+)/);

if (match) { // match is null if no match is found
    // The result you want is in match[1]
    console.log('value of var is:', match[1]);
}

您在捕获组((..) 部分)中放入什么模式取决于您想要什么。上面的代码捕获了所有内容,包括空格和特殊字符。

如果你只是想捕获一个“字”,即没有空格的可打印字符,那么你可以使用(\w+):

text.match(/This is normal text that has to exactly match, but here is a (\w+)/)

如果你想捕捉一个只有字母而不是数字的单词你可以使用([a-zA-Z]+):

text.match(/This is normal text that has to exactly match, but here is a ([a-zA-Z]+)/)

正则表达式的灵活性是为什么从一开始就内置正则表达式的语言通常不支持其他字符串扫描方法的原因。但当然,灵活性伴随着复杂性。