问一个Nodejs中javascript 正则表达式相关的问题
问一个Nodejs中javascript 正则表达式相关的问题
如何匹配一个非关键词列表
比如我现在有一个关键字列表: if|else
另有一个字符串a
我如何用正则表达式判断a既不是’if’, 也不是’else’的时候,能够获得a的值
试了下 /(?!if|else)/, 无法得到a的值
4 回复
这种情况为撒要用正则。把关键字放到{}里面,然后判断key是否存在不就好了吗。 比如 var keyMap = {if : true, else : true},a = “xxxxx”; var ressult = keyMap[a]?"" : a;
> s = 'laksjdf'
'laksjdf'
> s.match(/(?!if|else)/)
[ '', index: 0, input: 'laksjdf' ]
> s.match(/(?!if|else)/).input
'laksjdf'
取出里面 input 属性不就好了吗?
要在 Node.js 中使用正则表达式来匹配一个非关键词列表(例如 if
和 else
),你可以使用负向前瞻断言 (?!...)
。但是,仅使用该正则表达式是不够的,因为你需要确保整个字符串与该条件匹配。
以下是如何实现这一目标的步骤:
- 使用负向前瞻断言来确保当前字符不是
if
或else
的开头。 - 确保正则表达式能够匹配整个字符串。
你可以使用 test
方法来检查整个字符串是否满足条件。具体示例如下:
const keywords = ['if', 'else'];
const regex = new RegExp(`^(?:(?!${keywords.join('|')}).)*$`);
const a = "hello";
console.log(regex.test(a)); // true,因为 "hello" 既不是 "if" 也不是 "else"
const b = "if";
console.log(regex.test(b)); // false,因为 "if" 是关键词之一
const c = "else";
console.log(regex.test(c)); // false,因为 "else" 是关键词之一
解释:
^
和$
分别表示字符串的开始和结束,确保整个字符串都被检查。(?!${keywords.join('|')})
是一个负向前瞻断言,用于确保当前位置之后的字符不是关键词列表中的任何一个。.*
匹配任意数量的任意字符,以确保整个字符串被检查。
这样你就可以使用正则表达式来判断一个字符串是否既不是 if
也不是 else
。