英文:
escaping special regex character in cypress
问题
我有一个在regex101.com上工作的正则表达式,用于我的用例,即只匹配括号内的六位数字字符串。我的尝试在表格行包含选择器中使用该正则表达式没有成功。它们要么没有转义括号并返回不应匹配的行,要么在应该找到匹配项时找不到匹配项。在regex101.com上,工作的表达式是 /\([0-9]{6}\)/gm
。我已经尝试过双反斜杠,因为JS反斜杠本身就是一个特殊字符。这会导致过多匹配,并包括只有六位数字字符串(没有括号)的行。如果有更好的建议,欢迎提供。
cy.contains(
'div[id="driverTableContainer"] table tbody tr',
new RegExp("\\([0-9]{6}\\)", 'g')
)
.nextAll()
.then(($el) => {
cy.task('log', $el.text())
})
英文:
I have working regex at regex101.com for my use case which is to only match on a six digit numeric string that is enclosed in parenthesis. My attempts to use that regex in a table row contains selector are having no luck. They are either not escaping the parentheses & returning rows that should not match. Or they find no match when they should find matches. On regex101.com, the working expression is /\([0-9]{6}\)/gm
. I've tried double backslashes since JS backslash is itself a special character. That is over-matching & including rows that merely have a six digit numeric string (no parentheses). Any better suggestions appreciated.
cy.contains(
'div[id="driverTableContainer"] table tbody tr',
new RegExp("\\([0-9]{6}\\)", 'g')
)
.nextAll()
.then(($el) => {
cy.task('log', $el.text())
})
答案1
得分: 3
You don't need to escape the backslash, this works (presuming your element selector works)
cy.contains(
'div[id="driverTableContainer"] table tbody tr',
new RegExp('[0-9]{6}')
)
You don't need the g
since cy.contains()
passes for 1 or more occurrences of the string.
Also, cy.contains()
only returns the first row found. If you want multiple rows, you need to cy.get()
then filter
const re = new RegExp('[0-9]{6}')
cy.get('div[id="driverTableContainer"] table tbody tr')
.filter((index, el) => re.test(el.innerText))
英文:
You don't need to escape the backslash, this works (presuming your element selector works)
cy.contains(
'div[id="driverTableContainer"] table tbody tr',
new RegExp('\([0-9]{6}\)')
)
You don't need the g
since cy.contains()
passes for 1 or more occurances of the string.
Also, cy.contains()
only returns the first row found. If you want multiple rows, you need to cy.get()
then filter
const re = new RegExp('\([0-9]{6}\)')
cy.get('div[id="driverTableContainer"] table tbody tr')
.filter((index, el) => re.test(el.innerText))
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论